python - 基于现有字典python创建新字典
问题描述
我有两个字典如下
d1 = {
'k1':[4,31,21],
'k2':[31,41,51],
'k3':[91,10,111]
}
d2 = {
'l1':11,
'l2':'21',
'l3':'31',
'l4':41
}
我想在以下条件下返回一个新字典
- 如果 d1 字典的值存在于 d2 字典的值中,那么我需要返回一个带有 d1 键和 d2 键的新字典。
对于上述情况,我需要返回以下 d3 字典
d3 = { k1=[l2,l3],k2=[l3,l4]}
这是我尝试过的
d3={}
for key, val in d1.items():
for x in val:
if str(x) in d2:
tmp = new_dict[str(x)]
lst = d3[key] if key in d3 else list()
lst.append(tmp)
d3[key] = lst
解决方案
如果你真的想,你可以把它变成一个表情。注意:这要求所有列表值d1
都是整数。
d = {k3: v3 for k3, v3 in ((k1, [k2 for k2, v2 in d2.items() if int(v2) in v1])
for k1, v1 in d1.items()) if v3}
# {'k1': ['l2', 'l3'], 'k2': ['l3', 'l4']}
首先,您为您需要的项目创建一个生成器,其中k1
键来自d1
哪里以及您使用列表推导创建值的位置。因为您可能会得到一个想要删除的空列表,所以我们使用元组生成器。只有当我们确定列表不为空时,我们才会将其添加到最终字典中。
推荐阅读
- html - Angular:如何在按下回车键时提交表单组
- r - 如何替换R中条件的特定字符串?
- azure-devops - 从 myorg.visualstudio.com 迁移到 dev.azure.com/myorg
- c# - FluentValidation“错误cs0103名称'x'在当前上下文中不存在”.asp.net core 2.1
- python - 在打印机上打印整个窗口的 Tkinter 程序
- java - 如何读取现有的时间戳?
- flutter - 颤振中的上标和下标
- javascript - 如何使图标在 react-native-paper 中旋转?
- angular - 在模板文字角度 4 中使用样式/类
- python - 覆盖 Django 基本管理页面中的导航栏,使其与 base.html 相同