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