【问题标题】:How to make a dictionary from a txt file in Python如何在 Python 中从 txt 文件制作字典
【发布时间】:2021-03-30 23:39:09
【问题描述】:

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

丹尼尔,2 20、慢、卡 3、快捷、卡 30,慢,现金 卡特卡,1.5 13、慢、现金 24、正常、卡

我需要得到这样的答案:

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

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

【问题讨论】:

  • 文本是在这样的点列表中给出的?
  • 不,它只是一个列表

标签: python dictionary tuples


【解决方案1】:

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

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

或者,等价

data[(cashier, x)] = daniels_data

【讨论】:

  • 非常感谢
  • 根据 Mkael 的指导,您可能想要尝试的下一件事是构建一个循环,该循环从您的和文件中读取行,并使用以名称开头的行中的键(元组)构建字典,和其他行的值(元组列表)。
【解决方案2】:

代码:

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,慢速,卡片”)来遍历行。我们使用正则表达式检查这一点:^[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 附加到我们的字典dcur_key

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

输出:

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

【讨论】:

  • 这个答案没有解释它为什么起作用或 OP 缺少什么概念信息。如何从中学习?
  • @SethMMorton 嘿,谢谢提及。我已经添加了解释)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-10
  • 2011-09-27
  • 1970-01-01
  • 2014-12-13
相关资源
最近更新 更多