我正在将文件导入字典。该文件的组织方式如下:
Category One?Category Two?Category Three?Category 4?Category 5
我将每一行划分为各自的类别,意图是第一类和第二类中包含的信息需要合并为一个类别,最终成为关键,而其他类别包含以后的信息将成为价值观。
我之前没有使用过这么多类别(我已经完成了Cat1 = key和Cat2 = value)所以我对如何运用我所知道的东西感到有些困惑。
假设我已经收集并打开了源文件,如果我只有两个类别,我会这样做:
dict1 = {}
for line in file:
k,v = line.split('?')
dict1[k.strip()] = v.strip()
我不确定如何将第一类和第二类中的数据合并为一个功能,也不确定如何将类别3-5收集到单独的值中。现在我只是专注于将它们分为第一类=键和类别一切其他=值。似乎没有将第3行改为k,v,v,v,v确实有效,更可惜的是;这会产生
{'Category One': 'Category Five')
我错过了一些明显的东西吗? 编辑是的我确定是 - 男孩,我今天早上还需要另一杯咖啡吗?当然如果我把所有东西都称为v,它会给我最后一个叫做v ...
的东西(显然我的源文件看起来与此不同,但基本组织是相同的。)
答案 0 :(得分:2)
可能是这样的:
dict1 = {}
for line in file:
x = line.strip().split('?')
dict1[(x[0],x[1])] = x[2:]
会做你想要的。您需要先将值转换为可哈希的值。
答案 1 :(得分:0)
尝试:
l = line.split('?')
d = dict([(k, v) for k,v in zip (l[::2], l[1::2])])
答案 2 :(得分:0)
在我看来,你想要像:
for line in file:
k,v = line.split('?',1)
dict1[k.strip()] = [x.strip() for x in v.split('?')]
执行以下操作可能会更清晰:
for line in file:
lsplit = [x.strip() for x in line.split('?')]
dict1[lsplit[0]] = lsplit[1:]
如果您不需要进行任何剥离,可以使用operator.itemgetter
:
splitter = itemgetter(0,slice(1,None))
dict(splitter(x.split('?')) for x in file))
答案 3 :(得分:0)
我不完全确定我理解你需要什么,但在我看来你想要这样的东西:
wordsInLine = line.split( '?' )
key = wordsInLine[ 0 ], wordsInLine[ 1 ] # first two are used as a key
value = wordsInLine[ 2: ] # the rest are the 'value'
dictionary[ key ] = value
密钥实际上是一个元组,其中包含两个值。您可以访问如下值:
dictionary[ ( x, y ) ]
希望这会有所帮助