使用定义的规则分配列表的顺序

时间:2017-02-10 22:38:06

标签: python list dictionary

我有一个包含指定排序规则的预定义列表:

PyThread_acquire_lock

我有一本字典,我在其上迭代以获取其值。

lst = ['d', 'a', 't', 'b', 'r']

我想指定字典中每个值的每个“first”元素都在起始列表中。

我需要通过在第一个列表所规定的特定位置添加每个“第二”元素(即数字)来填充新列表。更详细的说,在这个循环中做一些事情:

dictionary = {}
dictionary[0] = ['t', 45]
dictionary[1] = ['b', 65]
dictionary[2] = ['r', 52]
dictionary[3] = ['a', 14]
dictionary[4] = ['d', 4]

我需要获得这个:

newList = []
for k, v in dictionary.iteritems():
    # Do what?

2 个答案:

答案 0 :(得分:4)

只需构建并使用正确的词典:

>>> map(dict(dictionary.values()).get, lst)
[4, 14, 45, 65, 52]

但您可能不应该按照自己的方式构建字典,而是直接使用dictionary = {'t': 45, 'b': 65, 'r': 52, 'a': 14, 'd': 4}。然后就是这样:

>>> map(dictionary.get, lst)
[4, 14, 45, 65, 52]

答案 1 :(得分:1)

您可以根据当前字典的值创建字典:

dictionary = {
    0: ['t', 45],
    1: ['b', 65],
    2: ['r', 52],
    3: ['a', 14],
    4: ['d', 4]
}

values_dict = dict(dictionary.values())

为了获得所需的结果,您可以使用 list comprehension 根据上述dict提取值:

lst = ['d', 'a', 't', 'b', 'r']
new_list = [values_dict[k]  for k in lst]

new_list保留的内容为:

[4, 14, 45, 65, 52]

注意:初始*字典* dict中所有值的第0个索引处的元素应该是唯一的。