双重嵌套 defaultdict
Double Nesting defaultdict
翻来覆去没弄明白,可能是一个非常简单的解决方案,但请帮助我理解。
来源(sample.txt):
1,1,2,3
2,3,2,4,4
这个:
import csv
from collections import defaultdict
input = "sample.txt"
with open(input) as f:
r = csv.reader(f)
d = defaultdict(list)
rlabel = 1
for row in r:
d[rlabel].append(row)
rlabel += 1
print(d)
得到这个:
defaultdict(<class 'list'>, {1: [['1', '1', '2', '3']], 2: [['2', '3', '2', '4', '4']]})
为什么我的列表周围有双括号?
使用 defaultdict,创建键时会关联一个默认值
>>> d = defaultdict(list)
>>> 'a' in d[1]
False
>>> d
defaultdict(<class 'list'>, {1: []})
鉴于您的行是一个列表,您正在将一个列表附加到与该键关联的列表中。
要添加你可以做的元素
d[rlabel]+= row
Why are there double brackets around my lists?
您的代码完全符合预期。重点是extend
和append
.
的用法
append
添加您作为单个元素传递的参数。由于列表是一个对象,而你的默认字典 class 是列表,所以列表被附加为列表的列表。
extend
方法在输入中迭代并通过添加可迭代对象中的所有元素来扩展原始列表。
因此,在这种情况下,如果您想将单个列表添加到您的 defaultdict,您应该使用 list.extend
方法。你的输出将是:
defaultdict(<class 'list'>, {1: ['1', '1', '2', '3'], 2: ['2', '3', '2', '4', '4']})
翻来覆去没弄明白,可能是一个非常简单的解决方案,但请帮助我理解。
来源(sample.txt):
1,1,2,3
2,3,2,4,4
这个:
import csv
from collections import defaultdict
input = "sample.txt"
with open(input) as f:
r = csv.reader(f)
d = defaultdict(list)
rlabel = 1
for row in r:
d[rlabel].append(row)
rlabel += 1
print(d)
得到这个:
defaultdict(<class 'list'>, {1: [['1', '1', '2', '3']], 2: [['2', '3', '2', '4', '4']]})
为什么我的列表周围有双括号?
使用 defaultdict,创建键时会关联一个默认值
>>> d = defaultdict(list)
>>> 'a' in d[1]
False
>>> d
defaultdict(<class 'list'>, {1: []})
鉴于您的行是一个列表,您正在将一个列表附加到与该键关联的列表中。
要添加你可以做的元素
d[rlabel]+= row
Why are there double brackets around my lists?
您的代码完全符合预期。重点是extend
和append
.
append
添加您作为单个元素传递的参数。由于列表是一个对象,而你的默认字典 class 是列表,所以列表被附加为列表的列表。extend
方法在输入中迭代并通过添加可迭代对象中的所有元素来扩展原始列表。
因此,在这种情况下,如果您想将单个列表添加到您的 defaultdict,您应该使用 list.extend
方法。你的输出将是:
defaultdict(<class 'list'>, {1: ['1', '1', '2', '3'], 2: ['2', '3', '2', '4', '4']})