2017-02-10 62 views
0

我有一个包含规则指定排序的预定义列表分配列表的顺序:使用定义的规则

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

而且我有我重复,以获取其值的字典。

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? 

我需要获得这样的:

newList = [4, 14, 45, 65, 52] 
+4

在'dict'中存储数据的时候,为什么你的键值为:0,1,2 ......而不是将键值设置为:“d”,“a”,“t”..?其次,在你的代码中,它应该是:'iteritems()',即'()'而不是'[]' –

+0

这是一个例子,字典的键是来自对象的ID。换句话说,我只需要根据字典中的值做一些事情(使用字典(zip)就可以了)。 – mgri

回答

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] 
+0

谢谢!它的工作原理和它是一个单线解决方案! – mgri

1

您可以创建基于当前词典作为值的字典:

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

values_dict = dict(dictionary.values()) 

为了得到想要的结果,你可以使用列表理解来提取基于值高于dict为:

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

其中通过new_list内容保持将是:

[4, 14, 45, 65, 52] 

注:在所有值的第0指数在初始*字典*字典的元素应该是唯一的。

+0

'TypeError:'dict'对象不可调用' – mgri

+0

@mgri哪个版本的Python?使用Python 2.7 –

+0

也适用于Python 3.4。你一定是做错了 –