从字典键中获取元组的第二个元素

时间:2017-12-02 12:34:55

标签: python python-3.x

我有以下词典:

  

{('我','喜欢'):14,('他'喜欢'):2,(& #39;我','讨厌'):12}

对于给定的word字符串,我想在字典中找到所有元组的第二个元素(这是字典的键),其中wordword='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
  1. 如何在字典中不仅首次出现而且出现所有这类事件?
  2. 编辑: 2. 如果元组的大小是动态的,你可以分享如何修改它。所以dict的关键是存储例如。 2elem元组或15elem等元组取决于字典?

2 个答案:

答案 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'

的lkeys的所有第二个单词的列表
['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替换为(),将生成器表达式更改为列表解析。