【问题标题】:Get values from irregular nested list从不规则嵌套列表中获取值
【发布时间】:2018-04-20 00:46:11
【问题描述】:

我有一个嵌套列表(dict 列表列表),其中第二个列表是不规则的。我想获取数组中某个键的所有值。

每一行的列表:

[{'0.1':1},{'0.2':2},{'0.3':3}]

[{'0.2':2},{'0.3':3},{'0.4':4},{'0.5':5}]

[{'0.1':1},{'0.2':2}]

[{'0.5':5}]

我希望将“0.5”键的所有值存储到一个数组中。我尝试了多个版本:

[record[i]['0.5'] for i in record]

-->TypeError: list indices must be integers, not list

    for d in record.values():
        print(d['0.5'])

-->AttributeError: 'list' object has no attribute 'values'

【问题讨论】:

  • 不要使用list作为变量名。
  • 为什么要在此处编辑问题正文并更改变量名称,请在代码中执行此操作!
  • 您只想打印这些值吗?或者你想把它们放到一个列表中?如果你想要一个列表,你只想要一个平面列表吗?还是您想要与原始列表对应的列表列表?

标签: python python-2.7 list dictionary nested


【解决方案1】:

执行此操作的简单方法是在列表推导中使用双循环:

record = [
    [{'0.1': 1}, {'0.2': 2}, {'0.3': 3}],
    [{'0.2': 2}, {'0.3': 3}, {'0.4': 4}, {'0.5': 5}],
    [{'0.1': 1}, {'0.2': 2}],
    [{'0.5': 5}],
]

output = [d['0.5'] for row in record for d in row if '0.5' in d]
print(output)

输出

[5, 5]

【讨论】:

    【解决方案2】:

    你可以试试这个:

    s = [[{'0.1':1},{'0.2':2},{'0.3':3}], [{'0.2':2},{'0.3':3},{'0.4':4},{'0.5':5}], [{'0.1':1},{'0.2':2}], [{'0.5':5}]]
    new_vals = [c[0] for c in [[b["0.5"] for b in i if "0.5" in b] for i in s] if c]
    

    输出:

    [5, 5]
    

    【讨论】:

    • 好吧,完美,这行得通。因此,如果我理解正确,则 s 是完整列表, c 列表列表和 b 包含字典的每个键和值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-05
    • 2014-08-27
    • 2020-04-15
    • 1970-01-01
    • 2015-04-26
    相关资源
    最近更新 更多