将列表与字典索引进行比较,并根据原始列表顺序返回字典值

时间:2019-02-01 15:16:27

标签: python list dictionary

我有一个列表,其中包含要与字典索引进行比较的“索引”值。我希望字典值以与列表相同的顺序返回。下面的示例:

list =['a','b','c','d'...n]

dict = {'d':'fourth' ,'a': 'first','b':'second','c':'third'...n}

问题是,当我执行以下命令时:

sorted_list = [value for index, value in dict.items() if index in list]

我最终得到一个列表:

['fourth','first','second','third']

代替:

['first','second','third','fourth']

是否有办法确保排序保持原始列表顺序?

我无法更改字典顺序以匹配列表,因为列表可能具有不同的值组合。

4 个答案:

答案 0 :(得分:2)

是的,只是遍历列表并从字典中获取值:

var app = require('tns-core-modules/application');
app.getNativeApplication().getResources().getIdentifier("color_name", "color", app.getNativeApplication().getPackageName());

输出

lst =['a','b','c','d']
dct = {'d':'fourth' ,'a': 'first','b':'second','c':'third'}
result = [dct[i] for i in lst]

print(result)

请注意,请勿将内置名称用作变量名称。上面的list comprehension等效于下面的['first', 'second', 'third', 'fourth'] 循环:

for

如果您想要一个更强大的版本,可以使用get方法并提供默认值,如下所示:

result = []
for e in lst:
    result.append(dct[e])

输出

lst =['a','b','c','d', 'f']
dct = {'d':'fourth' ,'a': 'first','b':'second','c':'third'}
result = [dct.get(e, 'missing') for e in lst]
print(result)

答案 1 :(得分:1)

使用

list(map(dct.get,lst))
Out[60]: ['first', 'second', 'third', 'fourth']

答案 2 :(得分:1)

这是使用operator.itemgetter的简单方法:

l =['a','b','c','d']
d = {'d':'fourth' ,'a': 'first','b':'second','c':'third'}

itemgetter(*l)(d)
('first', 'second', 'third', 'fourth')

您的代码存在问题,因为您正在dict.items()上进行迭代,因此将按照值在字典中的显示顺序提取值。您想以另一种方式进行此操作,从而通过遍历列表中的值以相同的顺序来获取字典中的值。

通过使用itemgetter,您可以从d获取l中的所有元素,因此,这是我所说的一种更简洁的方法,也可以使用列表理解。

答案 3 :(得分:0)

取决于您的需求的几种选择:

from collections import OrderedDict


def ret(items, lookup):
    # using a Generator, which you can then get items as needed. if you need all items, just cast to list
    for li in items:
        yield lookup[li]


def ret2(lookup):
    # if all you are concerned with is alphanumeric sort by keys, use the inbuilt OrderedDict
    lookup = OrderedDict(sorted(lookup.items(), key=lambda t: t[0]))
    return lookup.values()

用法:

print (list(
    ret(
        items=['a','b','c','d'],
        lookup={'d':'fourth' ,'a': 'first','b':'second','c':'third'}
    )
))

print (ret2(lookup={'d':'fourth' ,'a': 'first','b':'second','c':'third'}))

https://docs.python.org/2/library/collections.html