具有多个值的Python Dict键

时间:2016-06-13 22:39:20

标签: python dictionary

我正在学习字典,而且我知道我可以通过创建另外两个字典来实现这一点,但为了简洁起见,我想让代码更简洁,而不是再创建两个字典。 dict(最后,我为这个dict编写的所有内容都必须写在其他内容中),所以我想我比任何事都更好奇。我知道我不应该使用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'])

5 个答案:

答案 0 :(得分:1)

理想情况下,您拥有一个同质的数据结构 - 例如list dict 1 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'] ... 键访问)。

如果您需要州名称的映射(例如,您希望通过缩写查找一堆州的人口),您可以通过创建词典来轻松实现...

collections.namedtuple

1 这里还有其他选项......您可以使用自定义类,但这似乎也是public function projects() { return $this->hasMany('App\Models\Project'); } 列表的一个很好的候选者,假设您不是#39;计划改变数据。

答案 1 :(得分:0)

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

我不明白你想要实现什么,但简单的方法是:

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

您可以查看的另一件事是named 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))

答案 2 :(得分:0)

当我按照你的推荐(下图)运行它时,它会吐出来

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'])

答案 3 :(得分:0)

另一个例子,说明如何根据需要构建数据。

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'])

答案 4 :(得分:0)

刚刚看到最后一篇文章,这很有道理。至于它如何有用,我不知道,这只是我想做的事情,对一个键有三个值。我相信将来我可以从一个网站或数据库中获取信息并让它创建对,就像角色演员一样,但也许没有。这只是我生气的事情,我无法自己解决。