Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 将整数列表转换为字典_Python 3.x_List_Dictionary - Fatal编程技术网

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]
。嵌套理解在名称中有尾随下划线,因此它们的名称不同。