python - 结构嵌套列表和嵌套字典的区别
问题描述
在我发现嵌套列表理解如何工作后,我试图让嵌套字典理解工作。我成功地创建了嵌套字典理解,尽管我仍然对为什么语法不同感到困惑。可以这么说,在嵌套列表理解中,内循环在外循环内,而对于字典,内循环跟随外循环。
例子:
alist = [[1,2,3],[4,5,6],[7,8,9]]
print([[[xi, index] for index, xi in enumerate(x) ] for x in alist])
print({xi: index for x in alist for index, xi in enumerate(x)})
[[[1, 0], [2, 1], [3, 2]], [[4, 0], [5, 1], [6, 2]], [[7, 0], [8, 1], [9, 2]]]
{1: 0, 2: 1, 3: 2, 4: 0, 5: 1, 6: 2, 7: 0, 8: 1, 9: 2}
有人可以澄清语法上的这种差异,还是我在这里做错了什么?
解决方案
也许更容易看到你是否扩展了两个循环,在第一种情况下,你会看到你的结果有子列表,这些子列表被附加到一个更大的列表中,这就是在你的列表理解中创建阻塞的内层,并且必须伴随它for index, xi in enumerate(x)
. 当我们查看底部的字典理解时,您正在创建一个平面字典,该字典被附加到一个列表中,因此您的字典理解中没有内部块
lst = []
for x in alist:
new = []
for index, xi in enumerate(x):
new.append([xi, index])
lst.append(new)
print(lst)
# [[[1, 0], [2, 1], [3, 2]], [[4, 0], [5, 1], [6, 2]], [[7, 0], [8, 1], [9, 2]]]
d = {}
for x in alist:
for index, xi in enumerate(x):
d[xi] = index
print(d)
# {1: 0, 2: 1, 3: 2, 4: 0, 5: 1, 6: 2, 7: 0, 8: 1, 9: 2}
另一个例子是创建一个嵌套的字典理解也会有所帮助
print({alist.index(x):{xi:index for index, xi in enumerate(x)} for x in alist})
# {0: {1: 0, 2: 1, 3: 2}, 1: {4: 0, 5: 1, 6: 2}, 2: {7: 0, 8: 1, 9: 2}}
推荐阅读
- laravel - 在 Laravel 通知中使用 $notifiable 中的 Nexmo 自定义配置
- semantic-ui - 如何在 React Semantic UI 中的 Progressbar 上设置自定义文本
- vue.js - Nativescript-vue 在点击事件时显示图像
- android - 如何获取wifi ssid并上传到firebase?
- c - “the” C 标准是否指定编译器必须遵守的标准?
- php - 电子邮件不使用 PHPmail 功能发送
- php - 使用 MySQL 的简单搜索栏返回没有结果
- c# - 类不返回值
- python-3.x - Python中作为对象的函数范围
- node.js - 猫鼬鉴别器不调用父预保存钩子