所以说我有一个字典,其默认值为另一个字典
{% for key in key_list %}
<a href="{% url 'keysearch:index' %}?keys_selected={{ key.key }}${{ keys_selected }}" style="font-size: {{ key.count }}px;">({{ key.key }})</a>
{% empty %}
<div class="w3-card-2 w3-black w3-center w3-rest"><h4>There are no key queries with this combination.</h4></div>
{% endfor %}
问题是我传递给defaultdict(属性)的默认字典作为引用传递。我如何将其作为值传递?因此,更改一个键中的值不会更改其他键中的值
例如 -
attributes = { 'first_name': None, 'last_name': None, 'calls': 0 }
accounts = defaultdict(lambda: attributes)
我希望他们每个人都打印1,因为我只为'call'增加了他们各自的值一次。
答案 0 :(得分:8)
尝试:
accounts = defaultdict(attributes.copy)
自Python 3.3 lists
s also have copy
method以来,当您需要一个以列表作为默认值的dict时,可以使用与defaultdict
相同的方式使用它。
答案 1 :(得分:2)
我真的很喜欢warvariuc的解决方案。但是,请记住,您没有将dict
传递给defaultdict
...会导致TypeError
,因为该参数必须是可调用的。你可以在lambda中使用一个文字。或者更好的是,定义辅助函数:
>>> def attribute():
... return { 'first_name': None, 'last_name': None, 'calls': 0 }
...
>>> accounts = defaultdict(attribute)
>>> accounts[1]['calls'] = accounts[1]['calls'] + 1
>>> accounts[2]['calls'] = accounts[2]['calls'] + 1
>>> print(accounts[1]['calls'])
1
>>> print(accounts[2]['calls'])
1