【问题标题】:Dictionary assigning [closed]字典分配[关闭]
【发布时间】:2018-06-08 10:52:26
【问题描述】:
listim=[['1' ,'2'], ['3' , '4'], ['1', '5'], ['4', '1']]

我正在尝试使用 listim 为每个数字制作字典,

我想要 d={'1': 2 , 4, 5 ,'2':1, '3': 4, (...等)}

我的代码是(我找不到错误,但可能与字典有关):

a=1
dic={}
while a<6:
    for number in listim:
        if number[0]==a:
            if number[1] not in dic[a]:
                dic[a].append(number[1])
        elif number[1]==a:
            if number[0] not in dic[a]:
                dic[a].append(number[0])
        a+=1

我在网上找不到足够的信息,(我知道我可以)。我希望我足够清楚。谢谢

【问题讨论】:

  • 这个d={'1': 2 , 4, 5 ,'2':1, '3': 4 ... 毫无意义。解释得更好。
  • 您的示例输出不是有效的 Python 文字,也不清楚您想要什么。
  • 我投票结束这个问题,因为我想要的结果不是有效的 Python。

标签: python python-3.x dictionary


【解决方案1】:

让我们使用集合中的defaultdict,将列表用作工厂:

from collections import defaultdict

d = defaultdict(list)

listim=[['1' ,'2'], ['3' , '4'], ['1', '5'], ['4', '1']]

for i in listim:
    d[i[0]].append(int(i[1]))

dict(d)

输出:

{'1': [2, 5], '3': [4], '4': [1]}

【讨论】:

  • 此输出与d={'1': 2 , 4, 5 ,'2':1, '3': 4, (...and so on)}不匹配
  • 同意,但我认为 OP 想要每个键的值列表,而此方法提供了。
  • 我认为 OP 在 for 循环中请求另一行:d[i[1]].append(int(i[0]))
【解决方案2】:
dic = {}
for k,v in listim:
    dic[k] = int(v)

甚至更短:

dic = {k:int(v) for k,v in listim}

【讨论】:

    猜你喜欢
    • 2012-01-05
    • 2016-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多