Python - 列表字典
Python - dictionary of lists
制作列表字典的最佳方法是什么?
例如,如果我有列表 list1, list2 并且想制作一个字典 my_dict 这样:
my_dict = ['list1': list1, 'list2': list2]
我找到了 this 示例,但最佳答案是在 2009 年写的。也许有一些新的更简洁的方法可以做到这一点?
使用大括号语法定义字典,并为字典中的每个条目提供一个对应于每个值的键:
list_a = [1,2,3,4,5]
list_b = [6,7,8,9,10]
my_dict = {'list1':list_a, 'list2':list_b}
这应该有效:
my_dict = dict([('list1', list1), ('list2', list2)])
或者,或者:
my_dict = {'list1': list1, 'list2': list2}
结果是一样的。
您需要使用花括号而不是方括号,否则这可能就够了:
list1 = ['a', 'b', 'c']
list2 = [1, 2, 3, 4]
my_dict = {'list1': list1, 'list2': list2}
试试这个方法,很简洁。大括号,不是方括号。
我认为这是绕过它的最短路线。
list1 = [5, 500, 543]
list2 = [4, 4, 4]
my_dict = {'list1':list1, 'list2': list2}
如果想把变量名变成key,这里有一个similar question.
如果您只想要一个带有顺序键的列表字典。
def turn_to_dict(*args):
return {i: v for i, v in enumerate(args)}
lst1 = [1, 2, 3, 4]
lst2 = [3, 4, 6, 7]
lst3 = [5, 8, 9]
v = turn_to_dict(lst1, lst2, lst3)
>>> print(v)
{0: [1, 2, 3, 4], 1: [3, 4, 6, 7], 2: [5, 8, 9]}
对于列表字典,考虑 defaultdict
。
A 普通字典 工作正常,但如果找不到键会引发错误。
list1 = list("abcd")
list2 = [1, 2, 3, 4]
d = {"list1": list1, "list2": list2}
d["list3"]
# KeyError: 'list3'
这在某些应用程序中可能会造成破坏,可能需要额外的异常处理。
defaultdict
的行为类似于普通字典,同时添加了一些防止错误的保护。
import collections as ct
dd = ct.defaultdict(list)
dd.update(d)
dd
# defaultdict(list, {'list1': ['a', 'b', 'c', 'd'], 'list2': [1, 2, 3, 4]})
添加缺少的键将调用默认工厂函数,即 list
。这里不是错误,而是一个空容器:
dd["list3"]
# []
此条目是用一个空列表添加的。
dd
# defaultdict(list,
# {'list1': ['a', 'b', 'c', 'd'],
# 'list2': [1, 2, 3, 4],
# 'list3': []})
通过将默认工厂设置为 None
将 defaultdict
转换为常规字典
dd.default_factory = None
dd
# defaultdict(None, {'list1': ['a', 'b', 'c', 'd'], 'list2': [1, 2, 3, 4]})
或使用 dict()
内置函数:
dict(dd)
# {'list1': ['a', 'b', 'c', 'd'], 'list2': [1, 2, 3, 4]}
制作列表字典的最佳方法是什么? 例如,如果我有列表 list1, list2 并且想制作一个字典 my_dict 这样:
my_dict = ['list1': list1, 'list2': list2]
我找到了 this 示例,但最佳答案是在 2009 年写的。也许有一些新的更简洁的方法可以做到这一点?
使用大括号语法定义字典,并为字典中的每个条目提供一个对应于每个值的键:
list_a = [1,2,3,4,5]
list_b = [6,7,8,9,10]
my_dict = {'list1':list_a, 'list2':list_b}
这应该有效:
my_dict = dict([('list1', list1), ('list2', list2)])
或者,或者:
my_dict = {'list1': list1, 'list2': list2}
结果是一样的。
您需要使用花括号而不是方括号,否则这可能就够了:
list1 = ['a', 'b', 'c']
list2 = [1, 2, 3, 4]
my_dict = {'list1': list1, 'list2': list2}
试试这个方法,很简洁。大括号,不是方括号。
我认为这是绕过它的最短路线。
list1 = [5, 500, 543]
list2 = [4, 4, 4]
my_dict = {'list1':list1, 'list2': list2}
如果想把变量名变成key,这里有一个similar question.
如果您只想要一个带有顺序键的列表字典。
def turn_to_dict(*args):
return {i: v for i, v in enumerate(args)}
lst1 = [1, 2, 3, 4]
lst2 = [3, 4, 6, 7]
lst3 = [5, 8, 9]
v = turn_to_dict(lst1, lst2, lst3)
>>> print(v)
{0: [1, 2, 3, 4], 1: [3, 4, 6, 7], 2: [5, 8, 9]}
对于列表字典,考虑 defaultdict
。
A 普通字典 工作正常,但如果找不到键会引发错误。
list1 = list("abcd")
list2 = [1, 2, 3, 4]
d = {"list1": list1, "list2": list2}
d["list3"]
# KeyError: 'list3'
这在某些应用程序中可能会造成破坏,可能需要额外的异常处理。
defaultdict
的行为类似于普通字典,同时添加了一些防止错误的保护。
import collections as ct
dd = ct.defaultdict(list)
dd.update(d)
dd
# defaultdict(list, {'list1': ['a', 'b', 'c', 'd'], 'list2': [1, 2, 3, 4]})
添加缺少的键将调用默认工厂函数,即 list
。这里不是错误,而是一个空容器:
dd["list3"]
# []
此条目是用一个空列表添加的。
dd
# defaultdict(list,
# {'list1': ['a', 'b', 'c', 'd'],
# 'list2': [1, 2, 3, 4],
# 'list3': []})
通过将默认工厂设置为 None
defaultdict
转换为常规字典
dd.default_factory = None
dd
# defaultdict(None, {'list1': ['a', 'b', 'c', 'd'], 'list2': [1, 2, 3, 4]})
或使用 dict()
内置函数:
dict(dd)
# {'list1': ['a', 'b', 'c', 'd'], 'list2': [1, 2, 3, 4]}