1

我正在将文件导入字典。该文件是用这样的行组织的:

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 收集到单独的值中。现在我只专注于将它们分成类别 One = key 和 Categories Everything Else = values。将第 3 行更改为 k,v,v,v,v 似乎并不真正有效,更可惜的是;这会产生

{'Category One': 'Category Five')

我错过了一些明显的东西吗?编辑是的,我确实是——而且男孩,今天早上我需要再喝一杯咖啡吗?当然,如果我将所有内容都称为 v,它只会给我最后一个我称为 v 的东西...

(显然我的源文件看起来和这个不一样,但基本的组织是一样的。)

4

4 回答 4

2

也许是这样的:

dict1 = {}
for line in file:
    x = line.strip().split('?')
    dict1[(x[0],x[1])] = x[2:]

会做你想做的。不过,您需要先将这些值转换为可散列的值。

于 2013-04-26T17:25:02.507 回答
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 ) ]

希望这可以帮助

于 2013-04-26T17:29:02.290 回答
0

尝试:

l = line.split('?')
d = dict([(k, v) for k,v in zip (l[::2], l[1::2])])
于 2013-04-26T17:25:54.667 回答
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))
于 2013-04-26T17:27:17.507 回答