我有字典
my_dict = {"a":1, "b":2, "c":3}
并列出
my_list = [2,3,1]
我想用my_dict中的键替换my_list中的项目,例如...
my_list = [b, c, a]
我该如何实现?
答案 0 :(得分:1)
我敢肯定,有可能进行列表理解,但这可能是一种方法(只对列表进行一次迭代,并允许您覆盖循环中的潜在边缘情况):
for key, value in my_dict.items():
if value not in my_list:
# Does this case need special handling?
continue
index = my_list.index(value)
my_list[index] = key
这里有一些边缘情况需要考虑,例如如果并非所有项目都匹配,会发生什么情况;如果字典和列表的长度不相等,会发生什么情况。等等。根据您的用例,您要确保相应地覆盖所有可能的边缘情况。
应用于示例代码,它会产生以下输出:
>>> my_dict = {"a":1, "b":2, "c":3}
>>> my_list = [2,3,1]
>>> my_dict
{'a': 1, 'b': 2, 'c': 3}
>>> my_list
[2, 3, 1]
>>> for key, value in my_dict.items():
... if value not in my_list:
... # Does this case need special handling?
... continue
... index = my_list.index(value)
... my_list[index] = key
>>> my_list
['b', 'c', 'a']
答案 1 :(得分:1)
字典是映射。您想使用反向映射(使用值来查找键),所以让我们反转字典。
my_dict = {"a":1, "b":2, "c":3}
reversed_dict = {my_dict[k]:k for k in my_dict}
然后我们将dict应用于每个元素:
my_list = [2,3,1]
result = [reversed_dict[elem] for elem in my_list]
答案 2 :(得分:0)
您可以反转字典的键值对,然后迭代列表以获取相应的键。
>>> rev_dict = dict((v,k) for k,v in my_dict.items())
>>> rev_dict
{1: 'a', 2: 'b', 3: 'c'}
>>> [rev_dict[x] for x in my_list]
['b', 'c', 'a']
答案 3 :(得分:0)
您可以使用列表理解来做到这一点,您需要做的是:根据列表对dict.items进行排序,然后返回键:
>>> my_dict = {"a":1, "b":2, "c":3}
>>> my_list = [2,3,1]
>>> [key for key, value in sorted(my_dict.items(), key = lambda x:my_list.index(x[1]))]
['b', 'c', 'a']
答案 4 :(得分:0)
rev = { v:k for k,v in my_dict.items()}
new_list = [rev[item] for item in my_list]
输出new_list:
['b', 'c', 'a']
答案 5 :(得分:0)
这可能有效
for key, val in my_dict.items():
for i, v in enumerate(my_list):
if v == val:
my_list[i] = key
答案 6 :(得分:0)
您可以使用功能itemgetter
。首先,您需要在字典中交换键和值:
from operator import itemgetter
dct = {"a": 1, "b": 2, "c": 3}
lst = [2, 3, 1]
dct = {v: k for k, v in dct.items()}
# {1: 'a', 2: 'b', 3: 'c'}
print(list(itemgetter(*lst)(dct)))
# ['b', 'c', 'a']