【问题标题】:Converting nested list data into a dictionary将嵌套列表数据转换为字典
【发布时间】:2021-07-13 09:42:06
【问题描述】:

我正在尝试创建一个函数,该函数接受数据列表并构造一个字典,该字典为每个 data[0] 条目创建一个键,其中包含一个链接到初始键条目的相应值列表。如果有多个链接,则应该重复相同的值条目。

以下是所需输出的示例:

data = [("a", "b"), 
        ("a", "b"), 
        ("a", "c"),
        ("b", "c"),
        ("b", "a")]
        
data_to_dict(data)

# output
{"a" : ["b", "b", "c"], "b" : ["a", "c"]}

我编写了一些能够正确形成键的初始代码,但它只注册了最后一个键值对,而不是创建所有对的列表。

我的代码:

dict_data = {i[0]:[i[1]] for i in data}
    print(dict_data)

# output
{'a': ['c'], 'b': ['a']}

任何帮助将不胜感激。

【问题讨论】:

  • 为什么订单重要的是["a", "c"] 而不是["c", "a"]
  • 顺序无关紧要,我只是提供了一个示例数据集,以更好地帮助可视化需要做什么。

标签: python list dictionary


【解决方案1】:

当您有重复的键值时,您将覆盖这些值。您需要先添加列表,然后附加到它。您可以使用defaultdict 或仅使用setdefault() 来完成此操作

from collections import defaultdict

d = defaultdict(list)
for k, v in data:
    d[k].append(v)

print(d)
# defaultdict(list, {'a': ['b', 'b', 'c'], 'b': ['c', 'a']})
 
# defaultdicts work like a regular dict, but you 
# convert if you need to for some reason
dict(d)
{'a': ['b', 'b', 'c'], 'b': ['c', 'a']}

或者setdefault():

d = {}    
for k, v in data:
    d.setdefault(k, []).append(v)
print(d)
#{'a': ['b', 'b', 'c'], 'b': ['c', 'a']}

【讨论】:

    猜你喜欢
    • 2020-09-03
    • 1970-01-01
    • 1970-01-01
    • 2022-12-05
    • 2017-07-29
    • 2011-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多