如何使用for循环遍历字典?

时间:2016-06-16 09:24:28

标签: python list dictionary

我想将字典和列表解压缩成句子。例如:

newlist = [1, 2, 3, 4, 5, 6]
new_dictionary = {'code': 2, 'help': 6, 'broken': 4, 'is': 3, 'please': 5, 'my': 1}

原始句子是'My code is broken please help'。列表显示单词在句子中出现的位置。字典存储单词和单词关联的位置。

目标是遍历字典,直到匹配列表中的数字。一旦发生这种情况,与该值匹配的密钥将添加到列表中。这将继续发生,直到列表中没有更多数字。然后将该列表转换为字符串并打印给用户。

我想像这样的东西就是解决方案:

for loop in range(len(newlist)):
    x = 0
    for k,v in new_dictionary.items():
         if numbers[x] == v:
              original_sentence.append(k)
         else:
              x = x + 1

print(original_sentence)

但是,代码只打印一个空列表。有没有办法重新编写或重新安排for循环以使代码有效?

3 个答案:

答案 0 :(得分:4)

翻译字典并继续。请尝试以下代码。

>>> d = {'code': 2, 'help': 6, 'broken': 4, 'is': 3, 'please': 5, 'my': 1}
>>> numbers = [1, 2, 3, 4, 5, 6]
>>> d_inv = {v:k for k,v in d.items()}
>>> ' '.join([d_inv[i] for i in numbers])
'my code is broken please help'

答案 1 :(得分:2)

我认为你不想反转字典,所以你可以尝试这样的事情:

dictionary = {'code': 2, 'help': 6, 'broken': 4, 'is': 3, 'please': 5, 'my': 1}
numbers = [1, 2, 3, 4, 5, 6]

sentence = []
for number in numbers:
    for key in dictionary.keys():
        if dictionary[key] == number:
            sentence.append(key)
            break

答案 2 :(得分:1)

使用值对dict进行排序。

import operator
new_dictionary = {'code': 2, 'help': 6, 'broken': 4, 'is': 3, 'please': 5, 'my': 1}
sorted_x = sorted(new_dictionary.items(), key=operator.itemgetter(1))
print ' '.join(i[0] for i in sorted_x)

<强>结果

'my code is broken please help'

整行代码单行。

In [1]: ' '.join([item[0] for item in sorted(new_dictionary.items(), key=operator.itemgetter(1))])
Out[1]: 'my code is broken please help'