使用键和值将文件添加到字典中

时间:2014-05-05 00:13:55

标签: python python-3.x

我有一个我想要阅读的文件,它是这样的:

Warner, Bros, The Matrix, 5, 2.99

Sony, The Hobbit, 10, 3.99

Warner, Bros, Dark Knight, 4.99

我想从该文件创建一个字典,其中warner bros为关键字,其他所有字符串为值。我还需要将所有华纳兄弟加在一起制作一个键,不同的键值将是电影的名称和数量(矩阵为5)和价格。

我这样做的方式是我读取文件,然后将所有内容放入List中,然后使用该列表创建字典,但我意识到我将拥有同一品牌的多个键;例如华纳兄弟如何确保我只有一个具有多个价值的品牌?

谢谢!

3 个答案:

答案 0 :(得分:3)

使用defaultdict

from collections import defaultdict
d = defaultdict(list)
for key,value  in ([1,2],[3,4],[1,3],[4,2],[3,2]):
   d[key].append(value)
print d

答案 1 :(得分:0)

尝试以下方法......

data = '''Warner, Bros, The Matrix, 5, 2.99
Sony, The Hobbit, 10, 3.99
Warner, Bros, Dark Knight, 1, 4.99''' # the 1 is missing from your example
                                      # is it a typo? or the text data has this kind
                                      # of errors that you should check?

                                      # you can read your data with a csv.reader
                                      # for this example I'll just split the lines

yourdata = dict() # or use the defaultdict approach

lines = data.split('\n')
for l in lines:
    fields = l.split(',')
    price = float(fields.pop(-1))
    quantity = int(fields.pop(-1))
    title = fields.pop(-1).strip()
    value = {'title': title, 'quantity': quantity, 'price': price}
    key = ' '.join(f.strip() for f in fields)
    if key not in yourdata:
        yourdata[key] = [value]
    else:
        yourdata[key].append(value)

print(yourdata)

或者为什么不使用2部分钥匙......

    #  ...

    key = (' '.join(f.strip() for f in fields), title)
    value = {'quantity': quantity, 'price': price}
    yourdata[key] = value

    #  ...

答案 2 :(得分:0)

要打印结果,您可以使用类似的内容。我想你用你的数据作为电影公司名称的词典作为关键

for k in yourdata:
    print k            # format it as you need
    for movie in yourdata[k]:
        print ('\t'+movie['title'])
        print ('\t'+str(movie['quantity']))
        print ('\t'+str(movie['price']))
        print
    print