具有多个值的Python Dict键

2024-06-02 08:32:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在学习字典,我知道我可以通过再创建两个字典来实现这一点,但是为了简洁起见,我想让代码比必须再创建两个dict更简洁一些(当然,最后,我为这个dict写的所有内容都必须写在其他dict中),所以我想我比什么都好奇。我知道我不应该使用for循环,但我不知道另一种方法,至于LPTH的吸吮,我必须从某个地方开始。在

问题1:我怎样才能让这个循环通过每个州/缩写/城市?我需要做多个dict,或者一系列的列表并使用它们吗? 问题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'])

Tags: or方法代码内容列表for字典地方
3条回答

您可以将每个值设置为一个列表。

我不明白你到底想达到什么目的,但最简单的方法是:

states1 = {
1: ["Oregon", "OR", 1000]
2: ["Florida", "FL", 1000]
3: ["Pythonville", "PY", 1000]
4: ["Dictville", "DI", 1000]
}

另一个可以查找的东西是named tuple,它是我最喜欢的数据结构之一,当你想快速组织数据时。

^{pr2}$

当我按照你的建议运行它(下面),它会吐出来

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

我不知道为什么它一直这样做,我会猜测,如果出于某种原因,选择一个完全随机的状态,因为这是一个字典,它每次都会改变状态,偶尔会有重复。

^{pr2}$

理想情况下,您将拥有一个homgonous数据结构——例如listdict1。每个dict将保存有关特定状态的信息:

states1 = [
  {'name': 'Oregon', 'abbrev': 'OR', 'population': 1000},
  {'name': 'Florida', 'abbrev': 'FL', 'population': 1000},
  ...,
]

现在你的循环是这样的:

^{pr2}$

希望这里的好处是显而易见的。对于任何给定的状态,都可以用相同的方式检索相关信息(状态的名称总是可以通过'name'键访问)。

如果你需要一个州名称的映射(例如,你想通过缩写查找一堆州的人口),你可以很容易地通过创建一个dict。。。

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列表的一个很好的候选者,假设您不打算改变数据。

相关问题 更多 >