我需要根据这段文字制作字典
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 感到抱歉,但那是我的第一篇文章。非常感谢
答案 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')]}