繁体   English   中英

使用值作为列表创建字典的最优雅方法是什么?

[英]What is the most elegant way to create a dictionary with the value as lists?

所以我有类似的东西

retval = {}

# ...
# some code here to fetch data
# ...

for row in cursor.fetchall():
    if row.someid not in retval:
        retval[row.someid] = [dict(zip(columns,rows))]
    else:
        retval[row.someid].append(dict(zip(columns,rows))

产量:

retval = {
    1: [{'someid': 1, 'samplefield': 'valueX', ... },
        {'someid': 1, 'samplefield': 'valueY', ... }],
    2: [{'someid': 2, 'samplefield': 'valueX', ... }]
    }

我觉得有更多的pythonic方式来达到我需要的结果。

确切地说,有没有办法减少这些代码行:

if row.someid not in retval:
    retval[row.someid] = [dict(zip(columns,rows))]
else:
    retval[row.someid].append(dict(zip(columns,rows))

单线?

答:一直都在文档中 感谢Christian Ternuschthonicdaemon将我指向了正确的方向。 我更新了这个原因,我发现根据文档可以有多种方法。

from collections import defaultdict
retval = defaultdict(list) ## Or retval = defaultdict(lambda: []) based on my accepted answer.

# ...
# some code here to fetch data
# ...

for row in cursor.fetchall():
    retval[row.someid].append(dict(zip(columns,rows))

要么

retval = {} 

# ...
# some code here to fetch data
# ...

for row in cursor.fetchall():
    retval.setdefault(row.someid, []).append(dict(zip(columns,rows))

希望这对你有所帮助!

尝试使用内置collections模块中的defaultdict

from collections import defaultdict
retval = defaultdict(lambda: [])

# ...
# some code here to fetch data
# ...

for row in cursor.fetchall():
    retval[row.someid].append(dict(zip(columns,rows))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM