将一个字典嵌套字典的数据结构转换为字典列表

5
我有一个字典嵌套字典的数据结构。是否有可能将其转换为一个字典列表?如果不行,那么如何使用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
  }]


4
有没有可能将它转换为一个字典列表?是的,有。还有其他问题吗?从 [mcve] 开始如何? - cs95
可能是将Python字典转换为列表的重复问题。 - 4castle
5个回答

15

使用列表推导式即可完成任务,不需要使用 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'}]

2

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

如果你想保留外部字典的键而不将它们作为内部字典的值,下面的代码会为每个内部字典生成一个元组列表(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'})]

我使用add_nodes_from()函数通过来自pandasto_dict('index')函数生成的字典列表定义了一个networkx图,效果非常好。


2

提供一种解决方案,保留第一级字典中“key”与下一级字典中的“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}]

1
这正是我想要的。 - A Yashwanth

0
如果我理解问题非常好,任务就是将一个字典的字典转换为一个字典列表,而不会丢失数据结构。
使用列表推导式可以很好地实现这一点,其中列表中的每个项本质上都是一个字典的字典。
>>> 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'}}]

0
将一个字典的字典传递给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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接