python - 如何根据值更新字典键?
问题描述
我有两个具有相似值但键不同的字典。我想db
用第一个字典的键值更新第二个字典user
。
在不使逻辑过于复杂的情况下,最佳方法是什么?
例如,我有以下字典:
user = {'school': ['books', 'pencils', 'sheets', 'notebooks']}
db = {'education': ['books', 'pencils', 'sheets', 'notebooks'],
'actors': ['student', 'teacher', 'principal']}
user['school']
并db['education']
具有相同的列表值。我只想db
用user
. 我认为实现的方式如下:
def get_key(my_dict, val):
for key, value in my_dict.items():
if val == value:
return key
return None
res = {}
for key, value in db.items():
if value in user.values():
key_user = get_key(user, value)
if key_user:
res.update({key_user: value})
else:
res.update({key: value})
print(res)
我在 Python 3.6.6 中实现了这一点,所以据我所知,字典条目的顺序是保留的。
所需的输出如下:
{'school': ['books', 'pencils', 'sheets', 'notebooks'],
'actors': ['student', 'teacher', 'principal']}
解决方案
正如您所说的顺序很重要,我认为最简单的方法是重新创建字典,但对于较大的数据集不是很有效。
我们可以迭代db
重新创建它,我们唯一需要查看的是是否使用来自user
或的键db
。如果密钥存在于内部,user_values
那么我们可以获取它的索引并使用它来获取密钥user_keys
,否则我们使用key
.
user = {'school': ['books', 'pencils', 'sheets', 'notebooks']}
db = {'education': ['books', 'pencils','sheets','notebooks'],
'actors': ['student','teacher','principal']}
user_keys = tuple(user.keys())
user_values = tuple(user.values())
new_db = {user_keys[user_values.index(value)] if value in user_values else key: value for key, value in db.items()}
>>> {'school': ['books', 'pencils', 'sheets', 'notebooks'],
'actors': ['student', 'teacher', 'principal']}
推荐阅读
- c# - 如何从 Httpclient ReadAsStreamAsync 正确计算下载速度?
- c++ - /usr/bin/ld 找不到 -lgraph
- spring - 实现帐户服务,休息模板以使用异步任务
- c++ - 将元素添加到结构向量的全局向量
- c# - 有问题的 DropdownListFor 为不同的实现抛出不同的错误
- vuetify.js - 范围不适用于 vuetify 的 Vee-Validate
- php - 如何在 OpenCart 中运行 CodeIgniter?
- electron - 在我的自定义传输中未调用日志函数
- android - 如何在android另一个活动的操作栏上显示后退按钮
- nginx - Nginx - 添加 server_name 后,所有 url 都显示 404