【问题标题】:How to append multiple dictionary value containing in a nested list如何附加包含在嵌套列表中的多个字典值
【发布时间】:2021-03-23 21:42:30
【问题描述】:

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

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()]))

预期输出应如下所示:

  final_result
0 abc1
1 NA
2 abc2, abc14
3 abc3, abc4

【问题讨论】:

    标签: python-3.x data-structures


    【解决方案1】:

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

        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!!
    

    您将在每个wrd 中的每个dct 的结果中添加一行。您希望单个 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')
    

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

    上面的代码给出了输出:

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

    【讨论】:

      猜你喜欢
      • 2021-08-10
      • 2021-02-22
      • 2018-03-31
      • 1970-01-01
      • 2021-06-08
      • 2020-06-01
      • 1970-01-01
      • 2019-09-20
      • 2019-02-24
      相关资源
      最近更新 更多