微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何附加包含在嵌套列表中的多个字典值

如何解决如何附加包含在嵌套列表中的多个字典值

我正在尝试附加包含在嵌套列表中的多个字典值,如下所示,但没有获得预期的输出

library(dplyr)
library(ggplot2)

df <- transmute(
    iris,Location = Species,Date = as.Date(as.character(
        cut(Sepal.Length,breaks = 3,labels = c("2019-07-10","2019-07-12","2019-07-15")))),Weight = Sepal.Width)

ggplot(data = df,mapping = aes(x = Date,y = Weight,colour = Location)) + 
    stat_summary(fun = "mean",geom = "line") + 
    theme_bw()

预期输出应如下所示:

lst = [[{'A': 'abc1'}],[{'A': 'xyz'},{'2 ': '123'}],[{'A': 'abc2'},{'B': 'abc14'}],[{'X': 'abc3'},{'B': 'abc4'},{'4': 'abc10'},{'': '123dfghfh'}]]

import pandas as pd
result = []

for wrd in lst:
    for dct in wrd:
        vl_check = [val for val in dct.values() if 'abc' in val]
        result.append(','.join(vl_check) if vl_check else 'NA')

data = {'Result': result}
final_result = pd.DataFrame(dict([(k,pd.Series(v)) for k,v in data.items()]))

解决方法

这是一次很棒的尝试,您已经非常接近了。问题发生在这里:

    for dct in wrd: 
        vl_check = [val for val in dct.values() if 'abc' in val]
        result.append(','.join(vl_check) if vl_check else 'NA')  # << Problem!!

您为每个 dct 中的每个 wrd 在结果中添加一行。您希望单个 wrd 的所有元素都在同一行中。此外,如果 wrd 中的任何元素都没有 'abc',那么您最终可能会得到多个 NA。这是我的建议:

for wrd in lst:
    vl_check = []
    for dct in wrd:
        vl_check += [val for val in dct.values() if 'abc' in val]
    result.append(','.join(vl_check) if vl_check else 'NA')

首先,我们为单个 vl_check 中的所有项目附加到相同的 wrd。完成后,我们str.join() 该列表,以便所有这些项目都在我们放入 result 的单个字符串中。

上面的代码给出了输出:

            Result
0             abc1
1               NA
2       abc2,abc14
3  abc3,abc4,abc10

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。