如何从 Python 中的 txt 文件制作字典

时间:2021-03-30 23:39:09

标签: python dictionary tuples

我需要根据这段文字制作字典

Daniel, 2
20, slow, card
3, quick, card
30, slow, cash
Katka, 1.5
13, slow, cash
24, normal, card

我需要得到这样的答案:

{
  ('Daniel', 2.0): [
    (20, 'slow', 'card'), 
    (3, 'quick', 'card'), 
    (30, 'slow', 'cash')
  ], 
  ('Katka', 1.5): [
    (13, 'slow', 'cash'), 
    (24, 'normal', 'card')
  ]
}

但是我不知道如何制作双钥匙(带有收银员姓名和浮动号码) 请帮助并为 sh * tposting 感到抱歉,但那是我的第一篇文章。非常感谢

2 个答案:

答案 0 :(得分:1)

没有“双钥匙”这样的东西;请记住,任何(我们可以为其计算哈希值)都可以是字典中的键。在这种情况下,您希望使用元组(由名称和数字组成)作为键,例如:

cashier = 'Daniel'
x = 2.0
key = (cashier, x)
data[key] = daniels_data

或者,等效地

data[(cashier, x)] = daniels_data

答案 1 :(得分:0)

代码:

import re

text = """Daniel, 2
20, slow, card
3, quick, card
30, slow, cash
Katka, 1.5
13, slow, cash
24, normal, card"""

d, cur_key = dict(), tuple()

for line in text.split("\n"):
    if re.match("^[A-Z]", line):
        name, val = line.split(", ")
        cur_key = (name, float(val))
        d[cur_key] = []
    elif re.match("^[0-9]", line):
        a, b, c = line.split(", ")
        d[cur_key].append((int(a), b, c))

print(d)

说明:

我们用 \n 分割文本,并通过检查相应的行是否代表用户信息(例如“Daniel, 2”)或其数据(例如“20, slow, card”)来遍历行。我们使用正则表达式检查这一点:^[A-Z]^[0-9]

^[A-Z] => text starts with letters A to Z 
^[0-9] => text starts with numbers 0 to 9

如果该行包含用户信息,那么我们将其转换为 tuple 并将其设置为 cur_key 中的当前字典键,并在 d 中创建具有空列表的键

如果该行包含数据,那么我们将转换后的 tuple 附加到 d 内的字典 cur_key

否则,我们跳过该行并继续迭代

输出:

{('Daniel', 2.0): [(20, 'slow', 'card'), (3, 'quick', 'card'), (30, 'slow', 'cash')], ('Katka', 1.5): [(13, 'slow', 'cash'), (24, 'normal', 'card')]}