我想将字典和列表解压缩成句子。例如:
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循环以使代码有效?
答案 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'