“for”循环不能正确循环

2024-06-26 18:08:19 发布

您现在位置:Python中文网/ 问答频道 /正文

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']}

Tags: 字符串indf列表foriffoodmovie
3条回答

原因是该值存在时将被覆盖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']]})

如前一个答案所述,问题在于循环最终会覆盖x[y[0]]的值。根据所需的输出,您需要将append改为list。使用defaultdict已经有了一个很好的解决方案。如果您只想使用标准的list,这是一种方法:

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:
          if y[0] not in x:  # if this is the first time we append
            x[y[0]] = []     # make it an empty list
          x[y[0]].append(j)  # then always append

print(x)

希望这能奏效: 单行代码

代码:

op_dict={}
[op_dict.setdefault(x.split('.')[0], []).append(y) for x in b for y in a if x.split('.')[1] in y]

输出: Output lookslike

相关问题 更多 >