python - 自指字典理解
问题描述
最近,我在回答一个问题。代码按预期工作。但我想看看我是否可以实现我很少使用的字典理解。首先,让我解释一下这个问题。
OP 有一个示例列表,例如M1 = [['a', 14], ['a',7], ['a',16],['b',3],['b',15],['c',22],['c',1],['c',5]]
. 他们想要一个类似的输出。[['a',14,7,16],['b',3,15],['c',22,1,5]]
. 有道理,所以我创建了一个答案。
原始代码
x = [['a', 14,15], ['a',7], ['a',16],['b',3],['b',15],['c',22],['c',1],['c',5]]
dictX = {}
for lsts in x:
if lsts[0] in dictX.keys():dictX[lsts[0]].extend(lsts[1:])
else:dictX[lsts[0]] = lsts[1:]
输出
{'a': [14, 15, 7, 16], 'b': [3, 15], 'c': [22, 1, 5]}
我去
x = [['a', 14,15], ['a',7], ['a',16],['b',3],['b',15],['c',22],['c',1],['c',5]]
dictX = {}
dictX ={(dictX[lsts[0]].extend(lsts[1:]) if lsts[0] in dictX.keys() else dictX[lsts[0]]): lsts[1:] for lsts in x}
错误
Traceback(最近一次调用最后):文件“/Users/aspera/Documents/Python/Py_Programs/data/timeComplexity/test.py”,第 3 行,在 dictX ={(dictX[lsts[0]]].extend(lsts[ 1:]) if lsts[0] in dictX.keys() else dictX[lsts[0]]): lsts[1:] for lsts in x} File "/Users/aspera/Documents/Python/Py_Programs/data/ timeComplexity/test.py",第 3 行,在 dictX ={(dictX[lsts[0]].extend(lsts[1:]) if lsts[0] in dictX.keys() else dictX[lsts[0]] ): lsts[1:] for lsts in x} KeyError: 'a'
我对此的看法在很多方面似乎都是错误的。我将此用作参考(已接受答案的最高评论)
{(a if condition else b): value for key, value in dict.items()}
有什么办法可以把它变成听写理解。我想要一个示例,它与我提供的参考和我在原始代码中使用的逻辑一致
解决方案
由于嵌套循环,速度一点也不快,但它是可行的。在 dict 理解中使用列表理解。
seq = [['a', 14,15], ['a',7], ['a',16],['b',3],['b',15],['c',22],['c',1],['c',5]]
res = {i[0]:[k for j in seq if j[0] == i[0] for k in j[1:]] for i in seq}
print(res)
输出
{'a': [14, 15, 7, 16], 'b': [3, 15], 'c': [22, 1, 5]}
PS:我意识到这个问题与在 Python 中进行列表/字典理解时是否可以访问当前对象有关?,如果有人认为这是一个骗子,请务必将其标记为这样,我不确定,所以我将其保留。
推荐阅读
- firebase - 如何设置 GirdView 高度以包装其内容 - Flutter Web
- raspberry-pi - 使用 Pi 作为客户端将视频从 Raspberry Pi 流式传输到外部服务器
- javascript - 如何修复香草javascript中的cors错误?这是我的代码
- css - 如何创建两个, 但其中一个必须固定在中心
- python - 如何在 TKinter Entry 中输入数组?
- python - Python Pandas:在保留重复的同时加入表
- java - 如何在 Android 中将 PDF 文件转换为 WebP?
- c++ - 如何跨不同视口移植我的应用程序
- vue.js - 出现错误时如何突出显示 vee-validate 表单向导的输入字段?
- python-3.x - Python 写入 csv 文件:io.UnsupportedOperation: not writable