【问题标题】:Iterate list over a dictionary values and print matching key,value在字典值上迭代列表并打印匹配的键、值
【发布时间】:2021-08-05 18:27:52
【问题描述】:
d1 = {'A' : [1,2], 'B':[2,3,4],'C':[4,1,3,2], 'D':[5,6], 'E':[7,2], 'F':[8,1],'G':[1,3,4,2]}

l1 = [1,2,3,4,5,6,7,8,9]
d ={}

for i in l1:
 for key,value in d1.():
   for j in value:
     if i in value[j]:
       d.setdefault(key,[]).append(i)

预期输出:

  • 一个1
  • c 1
  • g 1
  • 一个2
  • b 2
  • c 2
  • e 2

但我收到一个错误:

ValueError: 没有足够的值来解包(预期 2,得到 1)

为了说明我要完成的工作,我有需要在模板中检查的链接列表,并返回模板名称和链接。

这里的模板名称是键,数字 r 是值

提前谢谢你

【问题讨论】:

  • for key,value in d1.(): 应该是for key,value in d1.items():
  • 对不起,是的。谢谢你指出,我错过了,但仍然。它抛出 IndexError: list index out of range
  • j 不会是索引,所以 value[j] 没有多大意义。 j 将是列表中的实际元素。

标签: python list dictionary


【解决方案1】:

这是你打算做的吗?

d1 = {
'A' : [1,2],
'B':[2,3,4],
'C':[4,1,3,2],
'D':[5,6], 
'E':[7,2], 
'F':[8,1],
'G':[1,3,4,2]}

l1 = [1,2,3,4,5,6,7,8,9]
d ={}

for i in l1:
 for key,value in d1.items():
   for j in value:
     if i is j:
       d.setdefault(key,[]).append(i)
print(d)

输出:

{'A': [1, 2], 'C': [1, 2, 3, 4], 'F': [1, 8], 'G': [1, 2, 3, 4], 'B': [2, 3, 4], 'E': [2, 7], 'D': [5, 6]}

【讨论】:

    【解决方案2】:

    我编辑了我的原始答案以符合您的说明:

    d1 = {'A' : [1,2], 'B':[2,3,4],'C':[4,1,3,2], 'D':[5,6], 'E':[7,2], 'F':[8,1],'G':[1,3,4,2]}
    l1 = [1,2,3,4,5,6,7,8,9]
    d = []
    
    for i in l1:
        for k, v in d1.items():
            if i in v:
                d.append((k,i))
    

    print(d) 输出:

    [('A', 1), ('C', 1), ('F', 1), ('G', 1), ('A', 2), ('B', 2), ('C', 2), ('E', 2), ('G', 2), ('B', 3), ('C', 3), ('G', 3), ('B', 4), ('C', 4), ('G', 4), ('D', 5), ('D', 6), ('E', 7), ('F', 8)]
    

    【讨论】:

    • 谢谢@Dawid Januszkiewicz 请您指导我如何在下面的列表中打印相同的输出,基本上是一个列表a 1 c 1 g 1 a 2 b 2 c 2 e 2
    • 'd' 必须使用列表而不是字典,然后最后一行将更改为 d.append((k, i))
    猜你喜欢
    • 2022-08-19
    • 2021-08-14
    • 2011-09-24
    • 1970-01-01
    • 2019-12-12
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 2018-10-16
    相关资源
    最近更新 更多