python - 我如何将每个 n 元素设置为 dict 理解中的 dict 值
问题描述
一个例子:
data_1 = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36]
data_2 = ['key1','key2','key3','key4','key5','key6','key7','key8','key9','key10','key11','key12']
data_3 = {'123':{'a':1},'222':{'b':2}, '333':{'b':3}}
我需要将此列表设置为通过下一个条件来dict键,data_1中的每12个元素应该是data_2中每个键的值,这个dict应该是数据3中的键值。
预期输出:
{'123':{'key1':1,'key2':2,'key3':3,'key4':4,'key5':5,'key6':6,'key7':7,'key8':8,'key9':9,'key10':10,'key11':11,'key12':12},
{'222':{'key1':13,'key2':14,'key3':15,'key4':16,'key5':17,'key6':18,'key7':19,'key8':20,'key9':21,'key10':22,'key11':23,'key12':24},
{'333':{'key1':25,'key2':26,'key3':27,'key4':28,'key5':29,'key6':30,'key7':31,'key8':32,'key9':33,'key10':34,'key11':35,'key12':36}
我的尝试:
result = {
key: dict(zip(data_2,data_1) for key, value in data_3.items()
}
我的结果:
{'123': {'key1': 1, 'key2': 2, 'key3': 3, 'key4': 4, 'key5': 5, 'key6': 6, 'key7': 7, 'key8': 8, 'key9': 9, 'key10': 10, 'key11': 11, 'key12': 12}, '222': {'key1': 1, 'key2': 2, 'key3': 3, 'key4': 4, 'key5': 5, 'key6': 6, 'key7': 7, 'key8': 8, 'key9': 9, 'key10': 10, 'key11': 11, 'key12': 12}, '333': {'key1': 1, 'key2': 2, 'key3': 3, 'key4': 4, 'key5': 5, 'key6': 6, 'key7': 7, 'key8': 8, 'key9': 9, 'key10': 10, 'key11': 11, 'key12': 12}}
我理解这部分陈述中有什么错误:
键:dict(zip(data_2,data_1)
我怎样才能达到我预期的结果?
解决方案
一种方法是使用zip只会迭代直到较小的迭代被消耗的事实,因此您可以执行以下操作:
iterable_data1 = iter(data_1)
result = {key: dict(zip(data_2, iterable_data1)) for key in data_3}
for key, value in result.items():
print(key, value)
这非常有效,因为它不会创建任何额外的列表。另外,你可以这样做:
result = {key: dict(zip(data_2, data_1[12 * i:])) for i, key in enumerate(data_3)}
for key, value in result.items():
print(key, value)
输出
123 {'key1': 1, 'key2': 2, 'key3': 3, 'key4': 4, 'key5': 5, 'key6': 6, 'key7': 7, 'key8': 8, 'key9': 9, 'key10': 10, 'key11': 11, 'key12': 12}
222 {'key1': 13, 'key2': 14, 'key3': 15, 'key4': 16, 'key5': 17, 'key6': 18, 'key7': 19, 'key8': 20, 'key9': 21, 'key10': 22, 'key11': 23, 'key12': 24}
333 {'key1': 25, 'key2': 26, 'key3': 27, 'key4': 28, 'key5': 29, 'key6': 30, 'key7': 31, 'key8': 32, 'key9': 33, 'key10': 34, 'key11': 35, 'key12': 36}
第二种方法的想法是,key
将data_3
指针移动data_1
12 个位置。
推荐阅读
- javascript - 带有 Electron (Chrome) 的 Windows 10 中的 window.screenX 不一致
- firebase - 在 Firebase 函数中进行 HTTPS 调用
- r - Shinydashboard 的问题 - dashboardSidebar 和 dashboardBody
- laravel - 拉拉维尔 | Auth::user()->id 在 AppServiceProvider 中不起作用
- java - Java OpenCSV - 忽略具有特定值的字段
- swift - 在协议扩展中使用默认值向下转换为协议
- javascript - jq 对 volatile 值进行动画处理
- java - 使用 guice 注释模块进行 Guice 注入失败
- java - 连接拒绝主机:localhost
- python - 如何用正则表达式匹配两个单词之间的内容?