use*_*374 3 python search dictionary sublist
说我有以下字典(我正在使用的字典更多,更大):
dict1={1:["item", "word", "thing"], 2:["word", "item"], 3:["thing", "item", "item"]}
Run Code Online (Sandbox Code Playgroud)
并将字典中使用的每个单词存储在列表中:
all_words=["item", "word", "thing"]
Run Code Online (Sandbox Code Playgroud)
我想通过字典子列表运行列表中的每个单词,并返回找到它们的所有子列表的键,将它们存储在元组中.所以我想得到:
dict2={"item":(1, 2, 3), "word":(1, 2), "thing":(1, 3)}
Run Code Online (Sandbox Code Playgroud)
继承人我所拥有的:
dict2={}
for word in all_words:
for key, sublist in dict2.items():
for word in sublist:
if word not in sublist:
dict2[word]=dict2[word]+key
else:
dict2[word]=key
Run Code Online (Sandbox Code Playgroud)
因此,基于评论的固定程序将如下所示
>>> dict2 = {}
>>> for word in all_words:
... # Iterate over the dict1's items
... for key, sublist in dict1.items():
... # If the word is found in the sublist
... if word in sublist:
... # If the current word is found in dict2's keys
... if word in dict2:
... # Append the current key as a one element tuple
... dict2[word] += (key,)
... else:
... # Create a one element tuple and assign it to the word
... dict2[word] = (key,)
...
>>> dict2
{'item': (1, 2, 3), 'word': (1, 2), 'thing': (1, 3)}
Run Code Online (Sandbox Code Playgroud)
如果你知道字典理解,那么同样可以写成
>>> {word: tuple(k for k, v in dict1.items() if word in v) for word in all_words}
{'item': (1, 2, 3), 'word': (1, 2), 'thing': (1, 3)}
Run Code Online (Sandbox Code Playgroud)
整个元组创建逻辑,基于dict1每个对应的word,已被挤压为单个生成器表达式并转换为元组与tuple(k for k, v in dict1.items() if word in v)
| 归档时间: |
|
| 查看次数: |
931 次 |
| 最近记录: |