Python 3.x 将整数列表转换为字典
我想转换以下列表:Python 3.x 将整数列表转换为字典,python-3.x,list,dictionary,Python 3.x,List,Dictionary,我想转换以下列表:items=[[1,91]、[1,92]、[2,93]、[2,97]、[1,60]、[2,77]、[1,65]、[1,87]、[1100]、[2100]、[2,76] 输入以下词典: d = {1: [91,92,60,...], 2:[93,97,77,...]} 我尝试过最奇怪的事情,比如: d = {} for i,k in items: d[i] = [k for i,k in items] 但是我有一个打字错误。有什么易于实施的建议吗?谢谢 #类型提示是Pyt
items=[[1,91]、[1,92]、[2,93]、[2,97]、[1,60]、[2,77]、[1,65]、[1,87]、[1100]、[2100]、[2,76]
输入以下词典:
d = {1: [91,92,60,...], 2:[93,97,77,...]}
我尝试过最奇怪的事情,比如:
d = {}
for i,k in items:
d[i] = [k for i,k in items]
但是我有一个打字错误。有什么易于实施的建议吗?谢谢 #类型提示是Python 3.9+
def转换(项目:列表[list[int,int]])->dict[int,list[int]]:
out={}
对于项目中的项目:
out\u list=out.get(项[0],]
out\u list.append(项目[1])
out[项目[0]]=out\u列表
返回
这是O(n)
第4行:这定义了要在out dict中设置值的内容。如果尚未为该键设置值,请使用空列表。这类似于defaultdict
,但更明确,不需要导入
如果您想要与以前使用的更接近的产品:
def convert(项目:list[list[int,int]])->dict[int,list[int]]:
返回{k:[v_2;对于k_2;,如果k_2;==k]对于k,则返回v_2;in items}
这是O(n²)。即使已设置密钥,也将再次检查该密钥。您可以通过以下代码段看到这一点:
随机导入
def foo(一):
out=random.randint(11000)
print(f“foo调用i={i},返回{out}”)
返回
print({k:foo(k)表示[1,2,3,1]}
示例输出:
foo called with i=1, returning 285
foo called with i=2, returning 175
foo called with i=3, returning 404
foo called with i=1, returning 380
{1: 380, 2: 175, 3: 404}
您可以使用collections模块中的defaultdict对象。这将允许您插入元素,如果密钥不存在,它将动态创建它
从集合导入defaultdict
def石斑鱼(项目):
分组=默认dict(列表)
对于项目中的(键,val):
分组[key]。追加(val)
返回分组
nums=[(1,90)、(1,54)、(2,45)、(2,43)]
输出=石斑鱼(nums)
打印(输出)
打印(输出[1])
输出
defaultdict(,{1:[90,54],2:[45,43]})
[90, 54]
您可以使用:
dict_items={}
对于项目中的k、v:
dict_items.setdefault(k,[]).append(v)
谢谢您的建议!第二个代码末尾的“用于k,用于项”是什么意思?这不应该是k_吗?如果不打算使用变量\uu
,那么调用它是相当标准的做法。在这里,我只需要它们的键,不需要值。另一种选择是不拆包,而是对项目中的项目执行,并将k
替换为项目[0]
,而不使用项目[1]
。嵌套理解在名称中有尾随下划线,因此它们的名称不同。