2011-09-20 77 views
0

我在django模板中导致字典的字典时遇到了奇怪的问题。django中字典问题的词典

data = [{'hrs': 9.0, 'ld': u'pname', 'dn': u'TS', 'ist': u'TS', 'act': u'O', 'date': datetime.date(2011, 9, 19), 'id': 1119556}, 
{'hrs': 9.0, 'ld': u'pname', 'dn': u'TS', 'ist': u'TS', 'act': u'Ti', 'date': datetime.date(2011, 9, 21), 'id': 1119558}, 
{'hrs': 2.5, 'ld': u'pname', 'dn': u'TS', 'ist': u'dmin', 'act': u'POC', 'date': datetime.date(2011, 9, 20), 'id': 1119577}, 
{'hrs': 0.5, 'ld': u'pname', 'dn': u'SMgr', 'ist': u'SMgr', 'act': u'PL', 'date': datetime.date(2011, 9, 20), 'id': 1119578}, 
{'hrs': 2.0, 'ld': u'pname', 'dn': u'SMgr', 'ist': u'TS', 'act': u'Mting', 'date': datetime.date(2011, 9, 20), 'id': 1119579}, 
{'hrs': 8.0, 'ld': u'sname', 'dn': u'holiday', 'ist': u'holiday', 'act': u'PL', 'date': datetime.date(2011, 9, 19), 'id': 1119455}, 
{'hrs': 8.0, 'ld': u'sname', 'dn': u'holiday', 'ist': u'holiday', 'act': u'PL', 'date': datetime.date(2011, 9, 21), 'id': 1119457}, 
{'hrs': 1.0, 'ld': u'sname', 'dn': u'TS', 'ist': u'TS', 'act': u'O', 'date': datetime.date(2011, 9, 20), 'id': 1119566}, 
{'hrs': 7.0, 'ld': u'sname', 'dn': u'PD', 'ist': u'PD', 'act': u'LOP', 'date': datetime.date(2011, 9, 20), 'id': 1119567}] 

使用字典的这个名单中写道以下逻辑

results = collections.defaultdict(dict) 

for fetch in data: 
    user = fetch['ld'] 
    get_id = fetch['id'] 
    adata = '%s/%s/%s/%s' % (fetch['dn'], fetch['ist'], fetch['act'], fetch['hrs']) 
    row = results[user] 
    row['user'] = user 
    dt = str(fetch['date']) 
    row[dt] = adata 

这给我下面的输出

结果:

{u'sname': {'2011-09-21': u'holiday/holiday/PL/8.0', '2011-09-20': u'PD/PD/LOP/7.0', 'user': u'sname', '2011-09-19': u'holiday/holiday/PL/8.0'}, 
u'pname': {'2011-09-21': u'TS/TS/Ti/9.0', '2011-09-20': u'SMgr/TS/Mting/2.0', 'user': u'pname', '2011-09-19': u'TS/TS/O/9.0'}} 

总的来说,我需要得到以下输出,但字典的字典打印日期关键值,而不是多个键值对同一日期

预期输出:

{u'sname': {'2011-09-21': u'holiday/holiday/PL/8.0', '2011-09-20': u'TS/TS/O/1.0', '2011-09-20': u'PD/PD/LOP/7.0', 'user': u'sname', '2011-09-19': u'holiday/holiday/PL/8.0'}, 
u'pname': {'2011-09-21': u'TS/TS/Trickle/9.0', '2011-09-20': u'TS/dmin/POC/2.5', '2011-09-20': u'SMgr/Smgr/PL/0.5', '2011-09-20': u'SMgr/TS/Mting/2.0' 'user': u'pname', '2011-09-19': u'TechSupport/TechSupport/O/9.0'}} 

一个我用下面的下面的模板标签的哈希表

模板

@register.filter 
def hash(object, attr): 
    gen_context = { 'object' : object } 
    try: 
    value = template.Variable('object.%s' % attr).resolve(gen_context) 
    except template.VariableDoesNotExist: 
    value = ' ' 
    return value 

HTML:

<table> 
    <thead> 
    <th>S.No</th> 
    <th>Name</th> 
    {% for dates in week_dates %} 
    <th>{{dates}}</th> 
    {% endfor %} 
    </thead> 
    <tr> 
{% for fetch in data.items %} 
<tr> 
<td>{{ forloop.counter }}</td> 
<td>{{ fetch.0 }}</td> 
{% for dates in week_dates %} 
<td>{{ fetch.1|hash:dates }}</td> 
{% endfor %}           
</tr> 
{% endfor %} 
</table> 

任何帮助真的很感激它。

如果您需要更多信息,请让我知道。

回答

2

正如教程ATLDASTONCE中所解释的那样,字典密钥是唯一。如果你想有一个键的多个值,那么你将不得不伪造一个序列。

{'foo': ['bar', 42]} 
+0

请帮我怎么做? – sush

+0

你甚至不打扰我的例子吗? –

+0

得到了重点,但突然想知道如何伪装一个序列。抱歉让你烦恼。 – sush

0

对于字典中的同一个键,您不能有多个值。密钥必须明确。因此,如果您尝试保存日期 - 价值对,并且日期已经是词典中的关键字,则其值将被覆盖。因此,你将不得不改变你的内部字典的结构,使用一个非常独特的关键。那么ID呢?据我所知,你可以在get_id中阅读它们,但不要使用它们。他们只是完美的工作。然后,您可以将所有内容保存在如下所示的结构中:{id: (date, adata)},使用元组。