我想读取一个文件并将每行的前2个值转换为键,将后两个值转换为值
file_name.txt
a b 1 2
d e 2 3
a c 4 6
我想创建一个像这样的字典
d={'a-b' :(1,2)},'d-e':(2,3)},'a-c':(4,6)}}
我将文件转换为列表,每行都是列表的一个元素:
v_list=['a b 1 2','d e 2 3','a c 4 6']
我还可以将文件转换为列表,每行中的每个值都作为一个元素:
v_list=['a','b','1','2','d','e','2','3','a',c','4','6']
但我没有得到正确的引用将此列表转换为具有值元组的嵌套字典。 有人可以建议我如何去做。
答案 0 :(得分:0)
假设您的文件采用您提供的格式,您可以尝试以下方式:
nested = dict()
with open('file_name.txt', 'r') as f:
for line in f.readlines():
tokens = line.strip().split()
if (nested.get(tokens[0], 0) == 0):
nested[tokens[0]] = dict()
nested[tokens[0]][tokens[1]] = (tokens[2], tokens[3])
print(nested)
# prints:
# {'a': {'b': ('1', '2'), 'c': ('4', '6')}, 'd': {'e': ('2', '3')}}
正如有人在评论中指出的那样,dict不能有重复的密钥。此代码将新值添加到现有密钥的dict。
答案 1 :(得分:0)
假设您可以将其读作DataFrame,您可以使用pandas apply函数然后将系列转换为字典。请记住,字典不能有重复键,如您所示。
INSERT INTO tempOrder (productID, cream, sugar)
VALUES (
Forms!HotCoffee!hotCoffeeChoice.Value,
Forms!HotCoffee!Cream,
Forms!HotCoffee!Sugar
)
答案 2 :(得分:0)
你的示例字典无效。密钥只能出现一次。这是词典的关键特征之一。也就是说,假设您关心订单,以下解决方案将起作用。
from collections import OrderedDict
def main():
d = OrderedDict()
with open("./file_name.txt", "r") as f:
for line in f:
vals = line.split()
d.setdefault(vals[0], {vals[1]: (vals[2], vals[3])})
print(d)
# OrderedDict([('a', {'b': ('1', '2')}), ('d', {'e': ('2', '3')})])
if __name__ == "__main__":
main()
答案 3 :(得分:0)
尝试使用您的第一个列表:
java.sql.*
由于你在dict中没有重复的键,你可以尝试将具有相同键的值分组,就像在另一个dict或列表中一样
这里的o / p看起来像是:
v_list = ['a b 1 2', 'd e 2 3', 'a c 4 6']
d = {}
for i in v_list:
st = i.replace(" ", "")
d[st[0]+"-"+st[1]] = (st[2], st[3])
print(d)
答案 4 :(得分:0)
假设你的输出是{'a-b':('1','2'),'d-e':('2','3'),'a-c':('4 ','6')}
f = open("data.txt", "r")
d = {}
for i in f.readlines():
splt = i.split(" ")
d[splt[0] + "-" + splt[1]] = (splt[2], splt[3])
print(d)