Python:按字符拆分长字符串以输入字典

时间:2013-04-26 17:14:14

标签: python dictionary python-2.7

我正在将文件导入字典。该文件的组织方式如下:

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 ...

的东西

(显然我的源文件看起来与此不同,但基本组织是相同的。)

4 个答案:

答案 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 ) ]

希望这会有所帮助