如何使用python dict切换值和键?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用python dict切换值和键?相关的知识,希望对你有一定的参考价值。

我的意见是:

files = {
    'Input.txt': 'Randy',
    'Code.py': 'Stan',
    'Output.txt': 'Randy'
} 

我希望输出为:

{'Randy':['Input.txt','Output.txt'], 'Stan':['Code.py']}

基本上这是这个qazxsw poi的另一个方向

这是我试过的:

switch key and values in a dict of lists

但它不起作用。我得到dictresult= {} for key,value in files.items(): dictresult[key]=value dictresult[value].append(key)

答案

这是一个简单的方法,我们迭代你的原始字典KeyError: 'Randy'keysvalues,并为每个值创建列表,以附加对应于该值的所有键。

files
另一答案

您的代码存在一些问题。

让我们来复习:

  • 首先,您正在获取密钥错误,因为您尝试将值附加到不存在的密钥。为什么?因为在你之前的陈述中你为dict [key]添加了一个值,现在你正试图访问/追加dict [value]。 files = { 'Input.txt': 'Randy', 'Code.py': 'Stan', 'Output.txt': 'Randy' } dictresult= {} for k, v in files.items(): if v not in dictresult: dictresult[v] = [k] else: dictresult[v].append(k) print(dictresult) # -> {'Randy': ['Output.txt', 'Input.txt'], 'Stan': ['Code.py']}
  • 您正在为新生成的密钥分配值,而不进行任何检查。每个新值都会覆盖它。 dictresult[key]=value
  • 然后,您尝试使用错误的密钥将新值附加到字符串。

您可以通过以下代码实现您的目标:

dictresult[value].append(key)

它将输出:

d = {}
for key,value in files.items():
if value in d:
    d[value].append(key)
else:
    d[value] = [key]
print(d)

它是如何/为什么有效?

让我们来复习:

  • if条件检查该键是否已存在于字典中。在字典上迭代时,它只返回它的键,而不是像dict.items()那样的键值对
  • 如果键在那里,我们只需将当前值附加到它。
  • 在其他情况下,如果该键不存在,我们将新键添加到字典中,但我们通过将其转换为列表来执行此操作,否则将插入字符串作为值,而不是列表,您将无法追加它。
另一答案

尝试使用{'Randy': ['Input.txt', 'Output.txt'], 'Stan': ['Code.py']} -

defaultdict

这将假设字典中的每个项目都有一个空列表,因此追加不会失败

另一答案

您可以检查dictresult中是否存在作为键的值

喜欢

from collections import defaultdict
dictresult= defaultdict(list)
for key,value in files.items():
     dictresult[value].append(key)
另一答案
dictresult= {}
for key,value in files.items():
     if not value in dictresult: dictresult [value]=[]
     dictresult[value].append(key)

以上是关于如何使用python dict切换值和键?的主要内容,如果未能解决你的问题,请参考以下文章

如何按值和键的多个条件对嵌套字典进行排序?

python字典-字典方法

如何将值和键都推送到 PHP 数组中

字典中值和键之间的计算

Flutter Firebase 数据库,DataSnapshot?如何获取值和键,null 安全

用键打印dict中的最大值[重复]