我无法将文件中的输入转换为字典结构。
文件的输入格式为: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都是唯一的
我的问题是我完全没有成功实现这一点。这就像我遇到了精神上的道路障碍。我不是要求你们中的任何人给我一个编码解决方案,只是一些提示或技巧可以帮助我解决这个问题。
感谢。
答案 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()