Python 有序词典

Python 有序词典,python,dictionary,ordereddictionary,Python,Dictionary,Ordereddictionary,我正在尝试创建一个方法,在编号列表中显示字典键。我之所以选择使用字典,是因为键的值(作为列表)中存储了大量数据,而这些数据不显示在此处。 例如: 1.鲍勃 2.西蒙 3.菲尔 我用一个简单的for循环实现了这一点 if self.caseload: i = 1 print "" for name in self.caseload: print "%d. %s" % (i, name) i += 1 然后,我希望用户能够使用其

我正在尝试创建一个方法,在编号列表中显示字典键。我之所以选择使用字典,是因为键的值(作为列表)中存储了大量数据,而这些数据不显示在此处。
例如:
1.鲍勃
2.西蒙
3.菲尔

我用一个简单的for循环实现了这一点

if self.caseload:
     i = 1
     print ""
     for name in self.caseload:
          print "%d. %s" % (i, name)
          i += 1

然后,我希望用户能够使用其分配的名称(非常简单)或分配给它的数字来选择其中一个键。这就是我遇到麻烦的地方。因为字典是无序的,而且数字是动态分配的,所以我不知道该怎么做。

只要你不从字典中添加或删除键,键的顺序就保持稳定

您可以索引
dict.keys()
列表,它的顺序仍然与您显示键时的顺序相同:

key = self.caseload.keys()[int(userchoice) - 1]
由于Python列表从0开始编制索引,因此必须通过减去1来转换用户输入

<> P>而不是使用手动计数,考虑在打印菜单时使用键来编号:

if self.caseload:
     print ""
     for i, name in enumerate(self.caseload, 1):
          print "%d. %s" % (i, name)

只要不从字典中添加或删除键,键的顺序就会保持稳定

您可以索引
dict.keys()
列表,它的顺序仍然与您显示键时的顺序相同:

key = self.caseload.keys()[int(userchoice) - 1]
由于Python列表从0开始编制索引,因此必须通过减去1来转换用户输入

<> P>而不是使用手动计数,考虑在打印菜单时使用键来编号:

if self.caseload:
     print ""
     for i, name in enumerate(self.caseload, 1):
          print "%d. %s" % (i, name)
你可以用

有序词典与常规词典一样,但它们记住了插入项的顺序

您还可以使用在迭代时获取项的索引

对于i,枚举中的名称(self.caseload,start=1):
打印“%d.%s”%(i,名称)
您可以使用

有序词典与常规词典一样,但它们记住了插入项的顺序

您还可以使用在迭代时获取项的索引

对于i,枚举中的名称(self.caseload,start=1):

打印“%d.%s”%(i,name)

有几种方法可以实现这一点

你可以创建一个新的dict来把数字和名字联系起来

In [2]: d = {'Bob': 'foo', 'Simon': 'bar', 'Phil': 'baz'}

In [3]: e = {n: v for n, v in zip(range(1, len(d)+1), d.keys())}

In [4]: e
Out[4]: {1: 'Bob', 2: 'Simon', 3: 'Phil'}
或者你可以将数字直接链接到字典的值

In [5]: f = {n: v for n, v in zip(range(1, len(d)+1), d.values())}

In [6]: f
Out[6]: {1: 'foo', 2: 'bar', 3: 'baz'}

检查输入是否为数字;如果是这样,您可以使用dict
e
获取名称,也可以使用
f
获取值。

有几种方法可以实现这一点

你可以创建一个新的dict来把数字和名字联系起来

In [2]: d = {'Bob': 'foo', 'Simon': 'bar', 'Phil': 'baz'}

In [3]: e = {n: v for n, v in zip(range(1, len(d)+1), d.keys())}

In [4]: e
Out[4]: {1: 'Bob', 2: 'Simon', 3: 'Phil'}
或者你可以将数字直接链接到字典的值

In [5]: f = {n: v for n, v in zip(range(1, len(d)+1), d.values())}

In [6]: f
Out[6]: {1: 'foo', 2: 'bar', 3: 'baz'}

检查输入是否为数字;如果是这样,您可以使用dict
e
获取名称,也可以使用
f
获取值。

这非常有效!我不知道字典即使在临时上下文中也能保持任何形式的秩序。这非常有效!我不知道字典即使在暂时的情况下也能维持任何形式的秩序。