簡體   English   中英

如何通過Python defaultdict迭代?

[英]How to Iterate through a Python defaultdict?

我有一本看起來像這樣的字典。

defaultdict(<type 'list'>,
{
 2012: [Counter({1: 1, 2: 1, 4: 1}), 3],
 2013: [Counter({4: 2, 12: 1, 5: 1, 6: 1}), 5],
 2014: [Counter({4: 3, 1: 1, 2: 1, 3: 1}), 6]}
)

我試圖通過Counter dict迭代。 像這樣。

2012
1 1
2 1
1 4
3

2013
4 2
12 1
5 1
6 1
5

這是我試過的代碼。

for key, value in d.iteritems():
    for k, v in value:
        print k, v

這是錯誤:

Traceback (most recent call last):
  File "C:/test.py", line 42, in <module>
    for k, v in value:
ValueError: too many values to unpack

JINJA2解決方案:

{% extends "base.html" %}
{% block title %}Archive{% endblock %}
{% block content %}

<dl>
{% for key, value in d.iteritems() %}
    <dt><a href="/{{ key }}">{{ key }}</a> ({{ value[1] }})</dt>
    {% for m, c in value[0].items() %}
       <dd><a href="/{{ key }}/{{ m }}">{{m|month_number}}</a> ({{ c }})</a></dd>
        {{ a }}
    {% endfor %}
{% endfor %}
</dl>

{%endblock%}

>>> for year, (counter, other_thing) in d.items():
...     print(year)
...     for k, v in counter.items():
...         print(k, v)
...     print(other_thing)
...     print()
...     
2012
1 1
2 1
4 1
3

2013
4 2
12 1
5 1
6 1
5

2014
1 1
2 1
3 1
4 3
6

接受您的數據是結構化的,如下所示明確迭代:

for k, v in d.items():
    print(k)
    c, x = v
    for kk, vv in c.items():
        print(kk, vv)
    print(x)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM