python - 用它的一个值交换一个键——python字典——另一个问题
问题描述
我有以下示例,我已经看到了这段代码的执行流程,并且我知道它有问题,因此我无法从代码中获得所需的结果。但是,我尝试了很多方法,但仍然不知道,我怎样才能得到想要的结果。
代码:
dict1 = {10: [22], 40: [50, 20, 60]}
new_dict = {}
for k, v in dict1.items():
for each_v in v:
if each_v < k:
v.remove(each_v)
# temp_v = v.copy()
# temp_v.remove(each_v)
new_dict[each_v] = [k] + v
# print(temp_v)
# print(v)
else:
new_dict[k] = v
print(new_dict)
电流输出:
{10: [22], 20: [40, 50, 60], 40: [50, 60]}
期望的输出:
{10: [22], 20: [40, 50, 60]}
*keep the original order*
我只想要交换它的IFkey
和其中一个IF比这个大。我不想在字典中添加更多项目。还value
key
value
如果大家有什么建议,欢迎评论,先谢谢了!
解决方案
我的方法:遍历所有键值对的副本。如果值列表的值小于键,我们删除键。然后我们用键替换列表中的最小值,并将该值用作新键。
dict1 = {10: [22], 40: [50, 20, 60]}
for k, v in list(dict1.items()): # using list() to copy the dict's items
# since we are going to delete a key
min_v = min(v)
if min_v < k:
del dict1[k]
min_v_index = v.index(min_v)
v[min_v_index] = k
dict1[min_v] = sorted(v)
print(dict1)
输出
{10: [22], 20: [40, 50, 60]}
警告
如果候选键已经是原始字典中的键,您将遇到问题。考虑拥有{10: [22], 25: [10]}
. 这将尝试创建具有重复10
键的字典。上面的代码将输出{10: [25]}
.
解决方案是检查新键是否已经存在于原始字典中,如果存在,只需将该值附加到该键的列表中,然后对其进行排序。我将把实现留给读者作为练习。
推荐阅读
- hyperledger-fabric - Hyperledger Fabric vs Sawtooth vs Iroha vs Indy vs Burrow?它们有何不同?有哪些用例?
- neo4j - Neo4j - 将所有路径导出到 csv。每条路径一排
- laravel - 获取 Laravel Mix 以从不同路径转换 JS
- c++ - boost::property_tree 的通用枚举转换器
- angular - 由于验证失败,Angular 6 指令的调用晚于正则表达式验证
- react-native - 如何模拟 Kontakt iBeacon 唯一标识符
- pdf - Imagemagick / ghostscript向pdf添加裁剪标记
- python - 如何检查消息是否由某个用户 discord.py 发送
- meteor - Meteor 和 VSCode:在未保存的更改后重建
- python - 如何选择具有最大值的行的所有列