无法将输入转换为字典

时间:2014-03-07 00:03:57

标签: python dictionary

我无法将文件中的输入转换为字典结构。

文件的输入格式为:questionNo user_id response

questionNo是对其进行回复的问题编号。 user_id 唯一标识做出回复的人。 response是用户为回答问题而输入的答案。

并在文件中看起来像这样:

1 67 1
1 109 1
1 23 2
1 24 1
1 67 3
1 23 5
2 23 3
3 22 4

我要做的是将这些数据转换为这样的结构:

{user_id:{ questionNo:response, questionNo:response,.......},user_id{...}...}

每个questionNo和user_id都是唯一的

我的问题是我完全没有成功实现这一点。这就像我遇到了精神上的道路障碍。我不是要求你们中的任何人给我一个编码解决方案,只是一些提示或技巧可以帮助我解决这个问题。

感谢。

3 个答案:

答案 0 :(得分:5)

我假设您已将文件中的条目读入entries列表,以简化操作。我将使用defaultdict来保存一些逻辑:

from collections import defaultdict

dct = defaultdict(dict)

for questionNo, user_id, response in entries:
    dct[user_id][questionNo] = response

答案 1 :(得分:0)

要创建字典,您将开始

mydict = {}

为特定用户添加回复时,您会说

mydict[user_id] = newvalue

如果尚未将user_id放入字典中,则可以通过

进行测试
if user_id not in mydict:
  mydict[user_id] = empty value # in your example it would either be [] or {}
mydict[user_id] = newvalue # This gets done under any circumstances

如果这些值本身是以#为问题的词典,那么您将以类似的方式添加新值,以使每个问题都只有最新的答案。如果问题/答案是列表对的元素,您将附加新的问题/答案条目并替换列表中已有的问题中的答案。

我看到你的问题/答案对在字典中,但我列出了完整性的列表参考。

我现在必须走了,但这应该给你一个开始。

答案 2 :(得分:0)

+1里卡多的答案似乎是最好的解决方案,虽然我想 给你我的解决方案,我认为看起来更简单(可能效率更低)

#----- Open file -----
f = open("file.extension","r")

#---- initialize dicts ----
dictionary = {}

#---- read first line -----#
line = f.readline()

#---- while line is not empty ----#
while line != "":
    #----- split the line -----#
    splitLine = line.split()

    #----- Get the 3 strings your need -----#
    questionNo = splitLine[0]
    user_id    = splitLine[1]
    response   = splitLine[2]

    #------ Check if user_id is not registered -----#
    if user_id not in dictionary:

        #------- Create the new entry -----#
        dictionary[user_id] = {questionNo:response}

    else:
        #------- Add the next questionNo along with the response -----#         
        dictionary[user_id][questionNo] = response

    #----- read new line ------#
    line = f.readline()