有没有办法在追加后添加更多的字典? django
Posted
技术标签:
【中文标题】有没有办法在追加后添加更多的字典? django【英文标题】:is there a way to add in more dict after inside an append? django 【发布时间】:2018-01-08 23:27:18 【问题描述】:如果标题有点难以理解,请道歉。 不太清楚如何在一行内解释它。
我想做的是……
其实我有这个代码
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
是“你好”
我想要
output.append(
TITLE: obj.title,
TYPE: obj.type,
WORD: obj.word,
)
如果我的obj.type
是“世界”
我想要
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
上面应该可以工作,但是如果有另一种更好的方法,我很想知道另一种方法,因为上面看起来太多余了。
提前感谢您的任何建议
【问题讨论】:
【参考方案1】:好吧,你所拥有的似乎还不错,但如果你真的讨厌代码重复,你总是可以在 if first 之外创建字典。
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 (https://docs.python.org/3/library/timeit.html) 来查看“漂亮的代码”是否值得花时间,也许它对您的用例没有太大变化。
另外,对于单线爱好者:
从 python 3.5 开始,就像 Pep 448 中建议的那样,您可以这样做:
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 情况,它伤害了我 pep8 的眼睛 :) 也应该是一个字 啊哈确实忙着编辑答案并试图理解无引号的字典。 > @Alceste_ 除了讨厌看到重复项之外,我认为会更快,特别是如果我有 15 个字段而不是只有两个字段。所以我之前所做的似乎更有可能让它有更好的时间表现? 嗯,你所做的是仔细检查类型,而你可以简单地做一个 if-else。所以时间可能不会有太大的不同。但是,如果您还使用 if-else 语句,则附加到 dict 可能会更慢。我的最后一种方法可能在后期 python 中得到了很好的优化,你应该尝试看看它是否能提供更好的结果。 (如果您不想使用 timeit,这对于小测试来说似乎很繁重,您可以使用from time import clock
并在 startpoint 和 after 千次调用之间进行区分。)
@Alceste_ Python 3.5 你的意思是:P【参考方案2】:
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
【讨论】:
以上是关于有没有办法在追加后添加更多的字典? django的主要内容,如果未能解决你的问题,请参考以下文章
追加到 json 中转储的字典列表,而不用 python 加载列表