我有以下词典:
{('我','喜欢'):14,('他'喜欢'):2,(& #39;我','讨厌'):12}
对于给定的word
字符串,我想在字典中找到所有元组的第二个元素(这是字典的键),其中word
为word='I'
second_word = (k[0][1] for k, v in d if word == k[0][0])
print(second_word)
第一要素。
我试过了:
<generator object generate_ngram_sentences.<locals>.<genexpr> at 0x7fed65bd0678>
<generator object generate_ngram_sentences.<locals>.<genexpr> at 0x7fed65bd0678>
<generator object generate_ngram_sentences.<locals>.<genexpr> at 0x7fed65bd06d0>
并希望得到&#34;喜欢&#34; 作为答案,但得到了:
civic panda
level
hezo
aba panda rotator
编辑: 2. 如果元组的大小是动态的,你可以分享如何修改它。所以dict的关键是存储例如。 2elem元组或15elem等元组取决于字典?
答案 0 :(得分:3)
你有正确的想法,但需要进行微调:
d = {('I', 'like'):14, ('he','likes'):2, ('I', 'hate'):12}
word='I'
second_word = [k[1] for k in d if k[0] == 'I']
print(second_word)
输出是所有第一个项目为'I'
['like', 'hate']
从那里:
second_word[0] --> 'like'
答案 1 :(得分:2)
我从Reblochon Masque的回答中窃取了第一句话:
你有正确的想法,但需要进行微调:
second_word = (k[0][1] for k, v in d if word == k[0][0])
直接在d
上进行迭代只生成键( 你感兴趣的是什么,所以这是正确的想法)。
现在,for k, v in d
实际上有效,不是因为你得到了键和值,而是因为键是一个元组,你将元组中的两个项解包为名k
和{{ 1}}。
因此v
已经是第一个单词而k
是第二个单词,您不需要使用v
或[0][0]
等任何索引。
使用不同的名称可以更清楚:
[0][1]
请注意,现在word = 'I'
second_words = (second for first, second in d if first == word)
是生成器表达式,而不是列表。如果您只是继续迭代second_words
,这很好,但如果您真的想要列表,请将second_words
替换为()
,将生成器表达式更改为列表解析。