【问题标题】:How to manipulate the dictionary keys and values如何操作字典的键和值
【发布时间】:2021-02-28 18:20:30
【问题描述】:

我有一本字典,我想将字典的键更改为唯一值。

final_dict = {"name1":['raj','raj','raj'],"name2":['Rahul','Thor','max','Rahul'],"name3":['Jhon','Jhon'], "name4":['raj','raj'], "name5":['Rahul','Thor','max']}

首先,我需要像这样的每个键的唯一值

final_dict = {"name1":['raj'],"name2":['Thor','max','Rahul'],"name3":['Jhon'], "name4":['raj'], "name5":['Rahul','Thor','max']}

然后我需要将键转换为值,将值转换为键 我需要的最终输出

output = {"raj":['name1','name4'], "('Thor','max','Rahul')":[name2,name5], "jhon":[name3]}

我试过了,但我只得到了唯一的值

mtype=[]
for key_name in final_dict:
    a = set(final[key_name])
    #print(tuple(a))
    mtype.append(tuple(a))
print(mtype)
u = set(mtype)
print(u)

【问题讨论】:

  • 你能发布你到目前为止所尝试的吗?

标签: python list dictionary tuples


【解决方案1】:

这是一条直截了当的方法-

  1. set() 负责处理唯一性,下面的列表理解将 dict 项更改为项、键元组。
  2. dict.setdefault() 允许将每个元组附加到空白列表 [] (key, value) 对中,其中相同的键获取值列表。
d = {}

l = [(i,k) for k,v in final_dict.items() for i in set(v)]

#print(l)
#[('raj', 'name1'), ('Thor', 'name2'), ('max', 'name2'), ('Rahul', 'name2'), 
#('Jhon', 'name3'), ('raj', 'name4'), ('Thor', 'name5'), ('max', 'name5'), 
#('Rahul', 'name5')]

for x, y in l:
    d.setdefault(x, []).append(y)
    
print(d)
{'Jhon': ['name3'],
 'Rahul': ['name2', 'name5'],
 'Thor': ['name2', 'name5'],
 'max': ['name2', 'name5'],
 'raj': ['name1', 'name4']}

【讨论】:

    【解决方案2】:

    这是解决问题的第一步。我会仔细阅读每一行,确保你理解发生了什么。随时在 cmets 中询问后续行动!

    from collections import defaultdict
    
    input = { ... }
    
    output = defaultdict(list)
    for key, values in input.items():
       unique_values = tuple(sorted(set(values)))
       output[unique_values].append(key)
    
    output = dict(output)  # Transform defaultdict to a dict
    
    

    【讨论】:

    • 非常感谢,但我需要 Rahul、Thor、max 作为一键
    • 对不起,我误读了这个问题。现在呢(我更新了我的答案)。
    • 感谢@wKavey,你是我的上帝,还有一个我得到了这样的输出 {('raj',): ['name1', 'name4'], ('Rahul', ' Thor', 'max'): ['name2', 'name5'], ('Jhon',): ['name3']} 在每个键中都有多余的逗号
    • 所以我们可以将输出作为字符串插入元组
    • 所以目前密钥的类型是Tuple。如果您希望它们作为字符串,只需将元组转换为字符串...unique_values = str(tuple(sorted(.......。甚至可能将unique_values 重命名为unique_key
    猜你喜欢
    • 2022-06-10
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 2015-11-16
    相关资源
    最近更新 更多