在python中提取字典键并将其分配给变量

2024-05-29 04:44:38 发布

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

文件名称.dat看起来像这样:

Fry, Philip J.;999 111-1111;999 222-2222  
Rodriguez, Bender B.;999 333-3333;999 444-4444  
Farnsworth, Professor;999 555-5555;999 666-6666  
Leela, Turanga;999 777-7777;999 888-8888  
Wong, Amy;999 999-9999;999 101-1010

下面的代码在底部给出了打印结果。我想做的是做一个菜单驱动的程序,允许用户通过数字选择他们想要修改的记录。在伪代码中,它看起来像这样:

  • 这里的电话号码与第一个代码块一起编号
  • 按数字输入要修改的记录
  • 用户输入3
  • 对于Rodriguez,Bender B输入c修改移动电话,或输入h修改家庭电话
  • 用户输入h
  • 键入10位数的电话号码,不带空格
  • 用户输入7771234567
  • 记录被更改
  • 输入p查看修改后的电话簿(显示所有记录,但Bender使用不同的电话
  • 你想再做一次修改吗?y代表是,n代表否

我的问题是我无法找到一种方法将主键绑定到输入的用户号。由于python字典没有顺序,我发现这很难做到。有人能帮忙吗?我只需要这些,剩下的我自己做。在

^{pr2}$

Phone listings:

  1. Farnsworth, Professor: Home 999 555-5555, Cell 999 666-6666
  2. Fry, Philip J.: Home 999 111-1111, Cell 999 222-2222
  3. Rodriguez, Bender B.: Home 999 333-3333, Cell 999 444-4444
  4. Wong, Amy: Home 999 999-9999, Cell 999 101-1010
  5. Leela, Turanga: Home 999 777-7777, Cell 999 888-8888

填充后打印pBook的结果,为这篇文章设置格式,以便更容易理解其结构。主键是人名,值是另一个字典,其中“cell”和“home”是键,电话号码是各自的值。在

{  
'Farnsworth, Professor': {'cell': '999 666-6666', 'home': '999 555-5555'},  
'Fry, Philip J.': {'cell ': '999 222-2222', 'home': '999 111-1111'},  
'Rodriguez, Bender B.': {'cell': '999 444-4444', 'home': '999 333-3333'},  
'Wong, Amy' : {'cell': '999 101-1010', 'home': '999 999-9999'},  
'Leela, Turanga': {'cell': '999 888-8888', 'home': '999 777-7777'}  
}  

Tags: 用户home记录cellphilipbenderrodriguezwong
3条回答

如果您只需要一个有序字典,请使用collections.OrderedDict

在Python2.7中,可以使用my_dict.keys()[index]my_dict.values()[index]按索引访问键或值。在

正如@mgilson所指出的,这在3.0中不起作用,因为它返回一个不支持索引的ValuesView对象,但您仍然可以将其强制到如下列表中:

list(my_dict.keys())[index]。在

python的更新版本(python2.7+)在collections.OrderedDict中有一个有序的字典类型,但是(据我所知),您仍然不能通过索引访问字典。我建议在你的字典旁边放一个有序的数据类型(比如列表)。然后,当您想通过索引获取值时,只需执行mydict[mylist[i]]。你也许可以通过dict的子类化使它更漂亮一些,但本质上就是这样。在

实际上,如果您想通过索引获取数据,那么使用list作为数据结构可能更好。。。这样做的好处是,你可以对它进行排序(例如按字母顺序),并且它保持它的顺序。在

虽然我认为整个设计是错误的,因为一旦你有一个巨大的电话簿,我认为打印它和让用户选择没有任何意义。在

但是,如果要绑定名称和用户选项(编号),可以在打印给用户的同时创建字典:

user_choices = {}
i = 1  
print '\nPhone listings:\n'  
for record in pBook:  
    key = i
    user_choices[key] = record 
    i += 1  
    print str(key) + ')', record + ':', 'Home', pBook[record]['home'] + ',', 'Cell', pBook[record]['cell']  
print '' 

那么要得到黄的手机号码,艾米,你可以print pBook[user_choices[4]]['cell']

相关问题 更多 >

    热门问题