在参数列表中指定嵌套的字典键

时间:2018-09-26 19:10:06

标签: python list dictionary nested key

我有一个遍历字典列表的函数,将指定的键值对返回到新的字典列表中:

data = [
    {'user': {'login': 'foo1', 'id': 'bar2'}, 'body': 'Im not sure', 'other_field': 'value'},
    {'user': {'login': 'foo2', 'id': 'bar3'}, 'body': 'Im still not sure', 'other_field': 'value'},
]

filtered_list = []
keys = ['user','body']

for i in data:
    filt_dict = dict((k, i[k]) for k in keys if k in i)
    filtered_list.append(filt_dict)

user键包含一个名为login的子键;如何将其添加到键参数列表中,而不是键user中?

示例输出:

filtered_list = [
    {'login': 'foo1', 'body': 'Im not sure'},
    {'login': 'foo2', 'body': 'Im still not sure'},
]

2 个答案:

答案 0 :(得分:4)

这个怎么样?假设您要迭代的字典中确实存在密钥链。

设置

>>> from functools import reduce
>>> data = [{'user': {'login': 'foo1', 'id': 'bar2'}, 'body': 'Im not sure', 'other_field': 'value'},
...         {'user': {'login': 'foo2', 'id': 'bar3'}, 'body': 'Im still not sure', 'other_field': 'value'}]
>>> keys = [('user', 'login'), ('body',)]

解决方案

>>> [{ks[-1]: reduce(dict.get, ks, d) for ks in keys} for d in data]
[{'body': 'Im not sure', 'login': 'foo1'}, {'body': 'Im still not sure', 'login': 'foo2'}]

答案 1 :(得分:1)

如果确定,列表中的所有元素(字典)都将具有您指定的键,那么快速解决方案可能是:

-webkit-overflow-scrolling: touch;

对于丢失键没有错误处理。