gpt4 book ai didi

Python语法。美丽,正确,简短的代码

转载 作者:太空宇宙 更新时间:2023-11-04 08:04:59 27 4
gpt4 key购买 nike

for item in listOfModels:
if item[0] in perms:
perms[item[0]][item[1]] = True
else:
perms[item[0]] = {item[1]: True}

我经常使用这样的代码。请告诉我漂亮、简短、正确的方法。

(库、书籍、示例等)

例如我有

[
['animal', 'rabbit'],
['animal', 'cow'],
['plant', 'tree'],
['animal', 'elephant'],
['fruit', 'strawberry'],
['fruit', 'apple'],
]

需要

{
'animal': ['rabbit', 'cow', 'elephant'],
'plant': ['tree'],
'fruit': ['strawberry', 'apple'],
}

{
'animal': {
'rabbit': True,
'cow': True,
'elephant': True
},
'plant': {
'tree': True
},
'fruit': {
'strawberry': True,
'apple': True
},

最佳答案

两个选项:使用dict.setdefault()或使用 collections.defaultdict() object .

使用dict.setdefault():

for category, name in listOfModels:
perms.setdefault(category, {})[name] = True

或使用defaultdict:

from collection import defaultdict

perms = defaultdict(dict)
for category, name in listOfModels:
perms[category][name] = True

dict.setdefault() 为您查找键,如果缺少键,则使用第二个参数设置值。这样你总是得到一本字典(即使是空的),然后你可以在上面设置name键。

defaultdict 采用工厂参数,每次您尝试访问的键丢失时,都会调用工厂来生成默认值。因此访问 perms['missing_key'] 与使用 perms.set_default('missing_key', default) 具有相同的效果;根据需要产生新的值(value)。

这两种方法都适用于生成列表或集合,而不是生成具有 True 值的字典:

# producing a list
for category, name in listOfModels:
perms.setdefault(category, []).append(name)

# or a set
for category, name in listOfModels:
perms.setdefault(category, set()).append(name)

# same with defaultdict
perms = defaultdict(list)
for category, name in listOfModels:
perms[category].append(name)

perms = defaultdict(set)
for category, name in listOfModels:
perms[category].add(name)

集合可能是这里的最佳选择,它直接等同于值设置为 True 的字典。

关于Python语法。美丽,正确,简短的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32780930/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com