如何获取与Python字典中的值对应的键?
假设我有一本字典:如何获取与Python字典中的值对应的键?,python,Python,假设我有一本字典: my_dict = {'A' : 250, 'B' : 270, 'C' : 240} 我有一个列表,其中的值按降序排列: my_list = [270, 250, 240] 现在,我想创建一个如下所示的列表: new_list = ['B', 'A', 'C'] 这些元素是按照我的清单排序的。我怎样才能做到这一点?谢谢。my_dict={'A':250,'B':270,'C':240} 我的清单=[270250240] def getKeyvalue: 对于my_di
my_dict = {'A' : 250, 'B' : 270, 'C' : 240}
我有一个列表,其中的值按降序排列:
my_list = [270, 250, 240]
现在,我想创建一个如下所示的列表:
new_list = ['B', 'A', 'C']
这些元素是按照我的清单排序的。我怎样才能做到这一点?谢谢。my_dict={'A':250,'B':270,'C':240}
我的清单=[270250240]
def getKeyvalue:
对于my_dict.items中的key、val:
如果val==值:
返回键
答案=listmapgetKey,我的列表
打印答案
如果你只想对字典排序,你不需要额外的列表。您可以这样做:
我的字典={'A':250,'B':270,'C':240}
ordered=dictsortedmy\u dict.items,reverse=True,key=lambda item:item[1]
答案=listordered.keys
打印答案
首先,使用将字典倒置。然后使用以获取所需列表:
inv_dict = {y: x for x, y in my_dict.items()}
new_list = [inv_dict[x] for x in my_list]
print(new_list)
# ['B', 'A', 'C']
如果允许您假设dict值中没有重复项,则可以反转dict:
my_dict = {'A' : 250, 'B' : 270, 'C' : 240}
my_list = [270, 250, 240]
inverse_dict = dict([(val, key) for key, val in my_dict.items()])
output = [inverse_dict[key] for key in my_list]
当然,如果允许重复值,则必须重新指定问题以定义重复情况下的行为,因为假设没有重复值似乎是合理的
当然,这在很大程度上违背了dict数据结构的本质,我们不禁要问,为什么这些数据首先会以错误的dict的形式出现在我们面前。这样的解决方案意味着某些地方需要重构。我发现最简单的方法是使用字典理解
my_dict = {'A' : 250, 'B' : 270, 'C' : 240}
my_list = [270, 250, 240]
answer = []
for num in my_list:
for key, value in my_dict.items():
if num == value:
answer.append(key)
一行:
new_list=listdictsorted{v:k代表k,v在my_dict.items}.items中,reverse=True.values
因为它变得有点凌乱,我将从内部到外部进行分解
{v:k代表k,v在my_dict.items}:这部分只是切换键和值。在这个例子中,从{A':250,'B':270,'C':240}到{250'A',270'B',240'C'}
排序{v:k代表k,v在my_dict.items}.items中,reverse=True:这将接受修改过的字典,并按其键对其进行排序。请记住,本词典中的键是原始的值。通过传递reverse=True,项目按数字降序排序
dictsorted{v:k代表k,v在my_dict.items}.items中,reverse=True:使用sorted返回键、值对的元组列表。使用dict函数将这些对转换为字典
listdictsorted{v:k代表k,v在my_dict.items}.items中,reverse=True.values:因为我们只需要字母的值,所以使用values方法。将其传递到列表以将数据从dictValues类型更改为列表类型。
就是这样,
代码语法
输出
我能想到的最好的方法是用值和键创建新的字典,因为当前字典中可能有重复的值。迭代dict并获取旧字典中的键值。这是否回答了您的问题?我建议多用几行字和几个名字。如果你需要12行解释,你的一行可能太短了,特别是出于教学目的。
my_dict = {'A' : 250, 'B' : 270, 'C' : 240}
my_list = [270, 250, 240]
def valKey(dict, list):
return [key for val in list for key, value in dict.items() if val == value]
print(valKey(my_dict, my_list))
['B', 'A', 'C']
[Program finished]