【问题标题】:understanding nested python dict comprehension理解嵌套的python dict理解
【发布时间】:2021-06-18 13:33:40
【问题描述】:

我正在与 dict 理解相处并试图了解以下 2 个 dict 理解是如何工作的:

select_vals = ['name', 'pay']
test_dict = {'data': [{'name': 'John', 'city': 'NYC', 'pay': 70000}, {'name': 'Mike', 'city': 'NYC', 'pay': 80000}, {'name': 'Kate', 'city': 'Houston', 'pay': 65000}]}
dict_comp1 = [{key: item[key] for key in select_vals } for item in test_dict['data']  if item['pay'] > 65000 ]

上面的行让我明白了 [{'name': 'John', 'pay': 70000}, {'name': 'Mike', 'pay': 80000}]

dict_comp2 = [{key: item[key]} for key in select_vals  for item in test_dict['data']  if item['pay'] > 65000 ]

上面的行让我明白了 [{'name': 'John'}, {'name': 'Mike'}, {'pay': 70000}, {'pay': 80000}]

在 for 循环中编写时,这两个 o/ps 有何不同?当我在 for 循环中执行时

dict_comp3 = []
for key in select_vals:
    for item in test_dict['data']:
        if item['pay'] > 65000:
            dict_comp3.append({key: item[key]})

print(dict_comp3)

上面的行让我和 dict_comp2 一样 [{'name': 'John'}, {'name': 'Mike'}, {'pay': 70000}, {'pay': 80000}]

如何在 for 循环中将 o/p 作为 dict_comp1 获取?

【问题讨论】:

  • 只有第一个包含字典理解。两者都是列表推导,第一个包含字典推导,另一个没有
  • 所以,{key: item[key] for key in select_vals } 是一个字典理解。 {key: item[key]} 不是
  • 确实如此。它们是列表推导,我从初始 dict 对象中提取列表。仍在尝试了解调用 for 循环的顺序。猜猜Paaksing的答案澄清了它:-)

标签: python python-3.x dictionary-comprehension


【解决方案1】:

select vals 迭代应该是内部迭代

result = []
for item in test_dict['data']:
    if item['pay'] > 65000:
        aux = {}
        for key in select_vals:
            aux[key] = item[key]
        result.append(aux)

【讨论】:

    猜你喜欢
    • 2018-09-07
    • 2016-05-10
    • 1970-01-01
    • 2013-07-28
    • 2011-06-06
    • 2011-12-24
    • 2017-03-01
    • 2013-12-28
    相关资源
    最近更新 更多