首页 > 解决方案 > “for”循环未正确循环

问题描述

a=[['kyle','movie_1','c_13'],
   ['blair','food','a_29'],
   ['reese','movie_2','abc_76']]

b=['df.movie_1',
   'ghk.food',
   'df.movie_2']

x = {}
for i in b:
    y = i.split('.')
    for j in a:
        if y[1] in j : x[y[0]]=j

print(x)

这是我检查列表中是否有字符串的代码a。我得到的输出是

{'df': ['reese', 'movie_2', 'abc_76'], 'ghk': ['blair', 'food', 'a_29']}

我想要的输出是

{'df': [['kyle','movie_1','c_13'],['reese', 'movie_2', 'abc_76']], 'ghk': ['blair', 'food', 'a_29']}

标签: pythonloops

解决方案


原因是该值存在时会被覆盖x['df']

您可以使用 defaultdict 来保存它们(虽然与您的预期略有不同。但这很容易):

from collections import defaultdict
a = [['kyle', 'movie_1', 'c_13'],
     ['blair', 'food', 'a_29'],
     ['reese', 'movie_2', 'abc_76']]

b = ['df.movie_1',
     'ghk.food',
     'df.movie_2']

x = defaultdict(list)
for i in b:
    y = i.split('.')
    for j in a:
        if y[1] in j:
            x[y[0]].append(j)

print(x)
# defaultdict(<class 'list'>, {'df': [['kyle', 'movie_1', 'c_13'], ['reese', 'movie_2', 'abc_76']], 'ghk': [['blair', 'food', 'a_29']]})

推荐阅读