![](/img/trans.png)
[英]Python: How to access the dictionary that has specific key-values in a list
[英]How to create dictionary key-values in django
我正在使用Django開發服務器Web,我的模型ST_Folio
包含idST
和idFolio
,我需要創建一個字典{idST: [idFolio1, idFolio2, ...]}
但我的問題是我可以創建類似的字典,但不是我想要的。
我正在使用這種方法..
st_database = St_folio.objects.exclude(idST__isnull=True)
dictionary = {k: list(g) for k, g in groupby(st_database, key=lambda q: q.idST)}
並獲得此
第一次打印(st_database):
<QuerySet [<St_folio: 1st_folio>, <St_folio: 2st_folio>, <St_folio: 3st_folio>]>
第二次打印(字典):
{<ST: st1>: [<St_folio: 1st_folio>, <St_folio: 2st_folio>], <ST: st2>: [<St_folio: 3st_folio>]}
我需要這樣的東西:
{<ST: st1>: [<idFolio: folio1>, <idFolio: folio20>], <ST: st2>: [<idFolio: folio1>]}
我的模型ST_Folio
class St_folio(models.Model):
idST = models.ForeignKey('ST', blank=True, null=True)
idFolio = models.ForeignKey('Folio', blank=True, null=True)
class Meta:
unique_together = (('idST', 'idFolio'),)
idPro = models.ForeignKey('Pro', blank=True, null=True)
path_img = models.TextField(blank=True, null=True)
note = models.TextField(blank=True, null=True)
lng = models.FloatField(blank=True, null=True)
lat = models.FloatField(blank=True, null=True)
date = models.DateTimeField(blank=True, null=True)
def __str__(self):
return str(self.id) + "st_folio"
謝謝!!
您可以訪問相關對象並從中構建列表:
dct = {k: [x.idFolio for x in g] for k, g in groupby(st_database, key=lambda q: q.idST)}
另外,請注意, groupby
要求對iterable進行預先排序,因此,您可能希望對應用groupby
的QuerySet進行排序:
st_database = St_folio.objects.exclude(idST__isnull=True).order_by('idST')
要么:
st_database = St_folio.objects.exclude(idST__isnull=True).order_by('idST_id')
如果你有為Meta.ordering
指定的不同字段。
您還可以添加select_related
以獲取相關對象並優化對相關對象的訪問。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.