【问题标题】:Dictionary help in Python3Python3 中的字典帮助
【发布时间】:2018-07-26 16:27:25
【问题描述】:

我正在尝试打印列表的格式化布局。我已经记下了主要部分,但我似乎无法正确编号。

代码如下:

shopping_list = {"eggs": "$2", "milk": "$3.50", "cereal": "$3"}

my_shopping_list = "".join(**n**+". "+item+" "+shopping_list[item]+"\n" for item in shopping_list)

print(my_shopping_list)

基本上我想按以下格式打印商品和价格:

{数字}。 {项目} {价格}\n

所以结果应该是:

1. eggs $2
2. milk $3.50
3. cereal $3

如果我在字典中添加更多项目,它应该可以工作

但我不知道用什么替换 n

**n**+". "+item+" "+shopping_list[item]+"\n" for item in shopping_list

我尝试过使用列表来做到这一点

shopping_list = [["eggs", "$2"], ["milk", "$3.50"], ["cereal", "$3"]]

my_shopping_list = "".join(str(n+1)+". "+shopping_list[n][0]+" "+shopping_list[n][1]+"\n" for n in range(len(shopping_list)))

print(my_shopping_list)

它工作得很好,但我需要它来为字典工作,所以我是否找到一种方法来索引字典,如列表,或者有更好的方法吗?

提前致谢!

【问题讨论】:

  • 注意,你没有在这段代码中使用字典理解
  • 哦,谢谢。那我可以知道它叫什么吗?

标签: python dictionary


【解决方案1】:

你几乎说对了。您可以调整您的代码以使用dict.items()

my_shopping_list = "".join(str(i+1)+". "+ k + " "+ v +"\n" for i, (k,v) in enumerate(shopping_list.items()))

但我建议使用str 格式,并使用\n 加入

print("\n".join('{}. {} {}'.format(i, k, v) \
      for i, (k,v) in enumerate(shopping_list.items())))

【讨论】:

  • enumerate() 是做什么的?
  • @vluke enumerate 将自动为您生成可迭代的每个项目的索引。例如,如果你有 l = ['a', 'b', 'c'] , enumerate(l) 将产生 [(0, 'a'), (1, 'b'), (2, 'c')]。也可以查看here
  • 这太完美了,我从来不知道有这个功能。感谢您的帮助
  • @vluke 考虑accepting the answer 如果有帮助:)
【解决方案2】:

这是一种方法

shopping_list = {"eggs": "$2", "milk": "$3.50", "cereal": "$3"}
my_shopping_list = "\n".join(("{0} {1} {2}".format(i, v[0], v[1]) for i, v in enumerate(shopping_list.items(), 1)))
print(my_shopping_list)

输出:

1 eggs $2
2 milk $3.50
3 cereal $3

【讨论】:

  • 你能解释一下为什么你改变了你改变的东西吗?我有点新
【解决方案3】:

使用itertools.count 使其可读。

from itertools import count

shopping_list = {"eggs": "$2", "milk": "$3.50", "cereal": "$3"}

c = count(1)
for k, v in shopping_list.items():
    print(f'{next(c)}. {k} {v}')

# 1. eggs $2
# 2. milk $3.50                                               
# 3. cereal $3

【讨论】:

  • 我可以知道你为什么在字符串前面添加“f”以及 itertools 中的 count 有什么作用吗?
  • IMO,这是对 itertools 的不必要使用,因为 enumerate 是一个内置函数,可以为您提供这样的功能
  • f 在字符串格式化字符串之前。阅读它here。关于count,请参考我的回答中的链接。
  • @RafaelC 我同意;有不同的做事方式。 :)
  • @Austin 同意 :) 我很欣赏使用 f'' 和 itertools,但对于这个问题,我相信对于像计数器这样简单的东西添加到项目中是不必要的依赖项跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-09
  • 2010-11-14
  • 1970-01-01
  • 1970-01-01
  • 2010-12-27
  • 2011-08-18
相关资源
最近更新 更多