[英]How to create a list if it doesn't exist and add to list if it does
假设我有一本看起来像这样的字典:
mappings = {"some_key": 3}
或者它看起来像这样:
mappings = {"some_key": [4,5,6]}
假设我在这个函数中有一个值 100 和一个键“some_key”:
def add_to_mappings(key, value):
if key in mappings:
mappings[key] = ?
如果它存在,我要么想添加到列表中,要么如果不存在,则创建一个。 最后,我希望我的映射看起来像:
mappings = {"some_key": [3, 100]}
或者
mappings = {"some_key": [4,5,6,100]}
没有defaultdict
:
mappings = dict()
def add_to_mappings(key, value):
try:
mappings[key].append(100)
except KeyError:
mappings[key] = [100]
使用defaultdict
:
from collections import defaultdict
mappings = defaultdict(list)
def add_to_mappings(key, value):
mappings[key].append(value)
编辑:我误解了最初的要求,如果一个项目已经存在,并从中创建一个列表和新项目,那么第一个示例可以更改为:
mappings = dict(foo=3)
def add_to_mappings(key, value):
try:
mappings[key].append(100)
except KeyError:
mappings[key] = [100]
except AttributeError:
mappings[key] = [mappings[key], value]
add_to_mappings("foo", 5)
# mappings ==> { "foo": [3, 5] }
您可以使用isinstance(x, list)
检查某物是否是列表。 您可以从字典中提取现有值并用简单赋值替换该值。 所以:
def add_to_mappings(d, key, value): # Remember to pass in the dict too!
if key in d:
# The value is present
v = d[k]
if isinstance(v, list):
# Already a list: just append to it
v.append(value)
else:
# Not a list: make a new list
d[k] = [v, value]
else:
# Not present at all: make a new list
d[key] = [value]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.