python - 如何使所有字典值在python中都是唯一的?
问题描述
我想要一个解决方案,使字典的所有键都具有唯一值,并尽可能地删除值以使每个值都唯一。例如:
my_dict = {'c': 3, 'e': 3, 'a': 2, 'f': 2, 'd': 2}
对于上面的字典,我需要从“f”中减去 2 次,从“e”中减去 3 次,从“d”中减去 1 次。结果将是 6,这意味着{'c':3, 'a':2, 'd':1}
。删除密钥不是问题。
请注意,我们可以删除 'c' 而不是 'e' 或 'a' 而不是 f'' 应该删除或删除哪个键并不重要,重要的是具有唯一值
这是我尝试过的:
for k, v in my_dict.items():
c = 0
while len(my_dict.values()) > len(set(my_dict.values())):
my_dict[k] = my_dict[k] -1
c += 1
解决方案
这不是您期望的结果,但它符合要求。
my_dict = {'c': 3, 'e': 3, 'a': 2, 'f': 2, 'd': 2}
to_remove = []
result = {}
for key, value in my_dict.items():
while value > 0:
if value not in to_remove:
to_remove.append(value)
result[key] = value
break
else:
value -= 1
result
推荐阅读
- javascript - Google Calendar Api CalendarList 列表方法不返回自有日历
- c - futex 工具返回了意外的错误代码。中止
- java - 将字符串转换为 3 个字符的子字符串
- c# - Unity 新 UI Toolkit 进度条
- node.js - 尝试在 MongoDB 数据模型中存储一些数据时出现问题
- python - 如何使用 sudo 运行 Python 脚本?(苹果电脑)
- django - Django WebRTC TURN/STUN/ICE 服务器
- java - 为 Recycler View 查询多个节点?
- c - 如何在 C 中使用 scandir() 递归地列出排序的子目录
- xamarin - 将值从本机项目传递到共享项目 Xamarin