繁体   English   中英

将字典字典转换为字典列表

[英]Converting a dictionary of dictionaries to a List of dictionaries

我有一本字典字典。有什么可能的方法可以将它转换为字典列表吗? 如果不是,那么 filter() 方法如何应用于过滤字典中的数据?

 {"0": {"_ref": "ipam:stat/ZGkMTAuMTQ4LjEyLjAvMjIvMA:default/10.158.2.0/22", "comment": "VLAN 0", "dhcp_utilization": 0, "disable": false, "enable_ddns": false, "extattrs": {"CITY": {"value": "city" }, "COUNTRY": { "value": "ABC" }, "Helpnow ID": { "value": "TA" "value": 0 } }, "members": [], .network": "10.158.2.0", "utilization": 4 },{"0": {"_ref": "ipam:stat/ZGkMQ4LjEyLjAvMjIvMA:default/10.109.2.0/22", "comment": "VLAN 0", "dhcp_utilization": 0, "disable": false, "enable_ddns": false, "extattrs": { "CITY": { "value": "city" }, "COUNTRY": { "value": "CDS" }, "Helpnow ID": { "value": "TA" "value": 0 } }, "members": [], .network": "10.109.2.0", "utilization": 9 }]

列表理解应该可以完成这项工作,不需要filter()

>>> dic_of_dics = {1: {"a": "A"}, 2: {"b": "B"}, 3: {"c": "C"}}

>>> list_of_dics = [value for value in dic_of_dics.values()]

>>>list_of_dics
[{'a': 'A'}, {'b': 'B'}, {'c': 'C'}]

只是提一下在下一级字典中保留与“id”相关联的一级“键”的解决方案。

将其重新表述为“将字典字典转换为字典列表并保留密钥”。

>>> dic_of_dics = {1: {"a": "A"}, 2: {"b": "B"}, 3: {"c": "C"}}

>>> [(lambda d: d.update(id=key) or d)(val) for (key, val) in dic_of_dics.items()]
[{'a': 'A', 'id': 1}, {'b': 'B', 'id': 2}, {'c': 'C', 'id': 3}]

我知道这个问题有点老了,但以防万一有人需要我正在寻找的解决方案:

如果您想保留外部 dict 的键而不将它们作为内部 dict 中的值,则以下代码为每个内部 dict 生成元组(key, dict)列表。

>>> dic_of_dics = {1: {"a": "A"}, 2: {"b": "B"}, 3: {"c": "C"}}
>>> [(k,v) for k, v in dic_of_dics.items()]
[(1, {'a': 'A'}), (2, {'b': 'B'}), (3, {'c': 'C'})]

我用它通过networkx库中的add_nodes_from方法从pandasto_dict('index')方法生成的字典中定义了一个图形,它就像一个魅力。

如果我很好地理解了这个问题,那么任务就是在不丢失数据结构的情况下将字典的字典变成字典列表。

list comprehension可以巧妙地实现这一点,其中列表中的每个项目本质上都是字典的字典。

>>> dic_of_dicts = {1: {"a": "A"}, 2: {"b": "B"}, 3: {"c": "C"}}
>>> [{k: v} for k, v in dic_of_dicts.items()]
[{1: {'a': 'A'}}, {2: {'b': 'B'}}, {3: {'c': 'C'}}]

将字典的字典传递给list()更简洁、更快速:

dic_of_dicts = {1: {"a": "A"}, 2: {"b": "B"}, 3: {"c": "C"}}
list_of_dicts = list(dic_of_dics.values())
list_of_dicts
[{'a': 'A'}, {'b': 'B'}, {'c': 'C'}]

基准:

%timeit [value for value in dic_of_dics.values()]
153 ns ± 1.13 ns per loop (mean ± std. dev. of 7 runs, 10,000,000 loops each)

%timeit list(dic_of_dics.values())
95.3 ns ± 0.639 ns per loop (mean ± std. dev. of 7 runs, 10,000,000 loops each)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM