Python 有没有办法在追加之后添加更多的dict?德扬戈

Python 有没有办法在追加之后添加更多的dict?德扬戈,python,django,list,dictionary,append,Python,Django,List,Dictionary,Append,如果标题有点难以理解,请道歉。 不太清楚如何用一行字来解释它 我想做的是 实际上我有这个密码 output = [] objs = Model.objects.filter(abc=abc) # this would return a some queryset for obj in objs: output.append({ TITLE: obj.title, TYPE: obj.type,

如果标题有点难以理解,请道歉。 不太清楚如何用一行字来解释它

我想做的是

实际上我有这个密码

    output = []

    objs = Model.objects.filter(abc=abc) # this would return a some queryset
    for obj in objs:
        output.append({
            TITLE: obj.title,
            TYPE: obj.type,
            # I want to add something here which is kind of like, if `obj.type` is 'hello' then print obj.word
        })

    return output
例如,如果我的
obj.type
是'hello'

我想要

        output.append({
            TITLE: obj.title,
            TYPE: obj.type,
            WORD: obj.word,
        })
        output.append({
            TITLE: obj.title,
            TYPE: obj.type,
            NADA: obj.nada,
        })
如果我的
obj.type
是'world'

我想要

        output.append({
            TITLE: obj.title,
            TYPE: obj.type,
            WORD: obj.word,
        })
        output.append({
            TITLE: obj.title,
            TYPE: obj.type,
            NADA: obj.nada,
        })
我想做一些事情,比如

    output = []

    objs = Model.objects.filter(abc=abc) # this would return a some queryset
    for obj in objs:
        if obj.type == 'hello':
            output.append({
                TITLE: obj.title,
                TYPE: obj.type,
                WORD: obj.word,
            })
        if obj.type == 'world':
            output.append({
                TITLE: obj.title,
                TYPE: obj.type,
                NADA: obj.nada,
            })
    return output
上述方法应该有效,但如果有其他更好的方法,我很想知道另一种方法,因为上述方法似乎太多余了


提前感谢您提供的任何建议

好吧,您所拥有的似乎还不错,但是如果您真的讨厌代码重复,您可以首先在if之外创建词汇表

output = []
objs = Model.objects.filter(abc=abc) # this would return a some queryset
for obj in objs:
    current_dict = {
        "TITLE": obj.title,
        "TYPE": obj.type,
    }
    if obj.type == "world":
        current_dict["NADA"] = obj.nada
    else:
        current_dict["WORD"] = obj.world

    output.append(current_dict)

return output
但是你可能会把事情拖慢一点。。(虽然不做第二次检查赢得了时间:P)

使用timeit()来查看“漂亮的代码”是否值得花时间,也许它对您的用例没有太大的改变

此外,对于一艘邮轮爱好者:

从python 3.5和中建议的类似版本开始,您可以执行以下操作:

return [
    {
        **{
            "TITLE": obj.title,
            "TYPE": obj.type
        },
        **{"NADA": obj.nada} if obj.type == "word" else **{"WORD": obj.word}
    } for obj in Model.objects.filter(abc=abc)
]
也可以放在一行中。
如果你真的喜欢简洁,也就是说,但有些人会说它比你所拥有的更糟糕^-^

你能不能把obj.Nada放低一点?它伤了我的眼睛:)还有一个应该是Wordah的确,他正忙着编辑答案,试图理解无引号的措辞@Alceste_uuu除了讨厌看到重复项之外,我还认为速度会更快,特别是如果我有15个字段而不是只有两个字段的话。因此,我之前所做的似乎更有可能使它具有更好的时间性能?您所做的是重复检查类型,而您可以简单地执行if-else。因此,时间可能不会有太大的不同。然而,如果您同时使用if-else语句,那么在dict后面追加可能会慢一些。我的最后一种方法可能在python后期得到了很好的优化,您应该尝试看看它是否能提供更好的结果。(如果你不想使用timeit,这对于小测试来说似乎很繁重,你可以使用
from time import clock
,并在startpoint和after milk calls之间进行区分。)@Alceste_uuupython3.5你的意思是:P
output = []

objs = Model.objects.filter(abc=abc)  # this would return a some queryset

for obj in objs:

    start_dict = {
        'TITLE': obj.title,
        'TYPE': obj.type
    }

    if obj.type == 'hello':
        start_dict['WORD'] = obj.word
    elif obj.type == 'world':
        start_dict['NADA'] = obj.nada

    output.append(start_dict)

return output