[英]Python Dict Key with Multiple Values
我正在学习字典,我知道我可以通过再创建两个字典来做到这一点,但是为了简洁起见,我想使代码更加简洁,而不是必须再创建两个字典(最终,所有内容我写的这个字典必须写在其他字典中,所以我想我比什么都好奇。 而且我知道我不应该使用for循环,但是我不知道另一种方式,就LPTH而言,我不得不从某个地方开始。
问题1:如何让它遍历每个州/缩写/城市? 我是否只需要做多个字典或一系列列表并使用它们? 问题2:为什么此代码会运行for循环11次?
states1 = {
'1': 'Oregon', 'a': 'OR','population': '1000',
'2': 'Florida', 'b': 'MI', 'population': '1000',
'3': 'California', 'c': 'CA', 'population': '1000',
'4': 'NewYork', 'd': 'NY', 'population': '1000',
'5': 'Michigan','e': 'MI','population': '1000',
}
for city, pop, in states1.items():
print "%s has the abbreviation %s and a population of %s" %states1['1'], states1['a'], states1['population'])
理想情况下,您将拥有一个统一的数据结构-例如dict
1 list
。 每个dict
将保存有关特定状态的信息:
states1 = [
{'name': 'Oregon', 'abbrev': 'OR', 'population': 1000},
{'name': 'Florida', 'abbrev': 'FL', 'population': 1000},
...,
]
现在,您的循环如下所示:
for state in states1:
print print "%s has the abbreviation %s and a population of %s" % (state['name'], states['abbrev'], states['population'])
希望这里的好处是显而易见的。 对于任何给定的州,您都可以以相同的方式检索相关信息(始终可以通过'name'
键访问该州的名称)。
如果您需要映射州名(例如,您想通过州名的缩写查找一堆州的人口),则可以通过创建字典来轻松地做到这一点。
abbrev_to_state = {state['abbrev']: state for state in states1}
florida_data = abbrev_to_state['FL']
new_hampshire_data = abbrev_to_state['NH']
...
1这里也有其他选项...您可以使用自定义类,但是如果您不打算对数据进行突变,这似乎也是collections.namedtuple
列表的不错选择。
您可以使每个值成为一个列表。
我不知道您到底想实现什么,但是简单的方法是:
states1 = {
1: ["Oregon", "OR", 1000]
2: ["Florida", "FL", 1000]
3: ["Pythonville", "PY", 1000]
4: ["Dictville", "DI", 1000]
}
您可以查找的另一件事称为tuple ,它是我想要快速组织数据时最喜欢的数据结构之一。
from collections import namedtuple
CityInfo = namedtuple("CityInfo", ["Name", "Abbr", "Pop"])
states1 = {
1: CityInfo("Oregon", "OR", 1000),
2: CityInfo("Florida", "FL", 1000),
3: CityInfo("Pythonville", "PY", 1000),
4: CityInfo("Dictville", "DI", 1000)
}
for city in states1.values():
print("{} has the abbreviation {} and a population of {}".format(city.Name, city.Abbr, city.Pop))
当我按照您的建议运行(如下)时,它吐出了
Michigan has the abbreviation MI and a population of 1000
Michigan has the abbreviation MI and a population of 1000
Michigan has the abbreviation MI and a population of 1000
不知道为什么它会持续这样做,我会猜测是否由于某种原因选择了一个完全随机的状态,因为这是一本字典,每次都会更改状态,偶尔会重复。
states1 = {
'state': 'Oregon', 'abbrev': 'OR','population': '10000',
'state': 'Florida', 'abbrev': 'MI', 'population': '1000',
'state': 'California', 'abbrev': 'CA', 'population': '1000',
'state': 'NewYork', 'abbrev': 'NY', 'population': '1000',
'state': 'Michigan','abbrev': 'MI','population': '1000',
}
for city, pop, in states1.items():
print "%s has the abbreviation %s and has a population of %s" % (states1['state'], states1['abbrev'], states1['population'])
另一个示例,说明如何根据需要构造数据。
states1 = {
'Oregon': {'abrv': 'OR','population': '1000'},
'Florida':{ 'abrv': 'MI', 'population': '1000'},
'California':{'abrv': 'CA', 'population': '1000'},
'NewYork':{'abrv': 'NY', 'population': '1000'},
'Michigan':{'abrv': 'MI','population': '1000'}}
for state in states1:
print "%s has the abbreviation %s and a population of %s" %(state, states1[state]['abrv'], states1[state]['population'])
刚刚看了最后一篇文章,那很有道理。 至于这怎么用,我不知道,那只是我想做的,对一个键有三个值。 我敢肯定,将来我可以从网站或数据库中获取信息,并将其创建成对,例如从演员到扮演的角色,但也许不是。 只是让我烦恼,我无法自己弄清楚。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.