【问题标题】:create a python dictionary where the value is a list of strings创建一个python字典,其中值是字符串列表
【发布时间】:2020-07-29 10:16:19
【问题描述】:

我有一个文件,其中每行有 2 个名称。 假设我有以下输入:

名字1 名字2
名称 3 名称 4
名字 1 名字 5

我想做一个这样的字典:

name1 : [name2, name5]
名称2:名称1
名称 3 : 名称 4
名称 4 : 名称 3
name5 : name1

这是我制作的代码,但我不知道我做错了什么..

d = {} 
for i in range(len(l)): # consider l the input
    d[l[i]] = ""

for i in range(0, len(l), 2):
    e1 = l[i]
    e2 = l[i+1]

    d.update({e1 : [d[e1], e2]}) #i think the update operation is wrong here..
    d.update({e2 : [d[e2], e1]})

【问题讨论】:

  • 您能否添加程序的输出(例如:print(d)),以便更容易理解出了什么问题?
  • ...开头也是print(l)

标签: python dictionary


【解决方案1】:

创建一个 defaultdict d,它将空列表设置为每个键的初始值,并在您迭代 l 时填充它们。

from collections import defaultdict
l = ['name1', 'name2', 'name3', 'name4', 'name1', 'name5'] # Values come in pairs
d = defaultdict(list) # Defaults all keys to []

for i in range(0, len(l), 2):
    d[l[i]].append(l[i+1])
    d[l[i+1]].append(l[i])

【讨论】:

    【解决方案2】:

    你可以使用defaultdict:

    >>> from collections import defaultdict
    
    >>> d = defaultdict(list)
    >>> for i in range(0, len(l), 2):
    ...     d[e1].append(e2)
    

    【讨论】:

      【解决方案3】:

      您可以将两个关键行更改为:

      d.setdefault(e1, []).append(e2)
      d.setdefault(e2, []).append(e1)
      

      如果键不存在,这将启动一个空列表,然后填充它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-13
        • 2021-05-14
        • 2021-07-12
        • 1970-01-01
        • 2016-12-02
        • 1970-01-01
        相关资源
        最近更新 更多