【问题标题】:How to reference a dictionary key passed into a function?如何引用传递给函数的字典键?
【发布时间】:2014-12-11 22:57:37
【问题描述】:

假设我有一本这样的字典:

phone_numbers = {'Ted': '555-222-1234', 'Sally': '555-867-5309'}

我想要一个同时返回键和传递给它的值的函数,例如:

>>> phonebook(phone_number['Ted'])
Ted's phone number is: 555-222-1234

在伪代码中,函数是:

def phonebook(number): 
    print("{}'s phone number is: {}".format(
        number.key(),  # Not a real dictionary method!
        number.value())  # Also not a real dictionary method!

有没有一种方法可以在不对类型和类进行大量主要后端重写的情况下做到这一点?

【问题讨论】:

  • 不能; phone_number['Ted'] 被评估为 '555-222-1234' 之前 phonebook 被调用。你可以做例如phonebook(phone_number, 'Ted'),不过。
  • ...此时您可以使用phone_numbers.get()
  • 这是一个自学 Python 项目的一部分。字典是用于此类函数的错误数据类型吗?

标签: python function dictionary


【解决方案1】:

您需要同时传递字典和要查找的名称:

>>> phone_numbers = {'Ted': '555-222-1234', 'Sally': '555-867-5309'}
>>> def phonebook(dct, name):
...     print("{}'s phone number is: {}".format(name, dct[name]))
...
>>> phonebook(phone_numbers, 'Ted')
Ted's phone number is: 555-222-1234
>>>

执行phone_number['Ted'] 只返回与字典中的键'Ted' 关联的字符串电话号码。意思是,没有办法将这个字符串追溯到它来自的字典。

【讨论】:

    【解决方案2】:

    这是你的答案:

    def phonebook(phonenumber):
        for name, number in phone_numbers.items():
            if(number = phonenumber):
                print("{}'s phone number is: {}".format(name, number)
                return
    

    【讨论】:

    • 这个答案表明了对字典的好处的根本误解,并且使用范围来访问变量有点不明智。
    • 我知道,但它确实回答了这个问题。我认为方法电话簿就像一个反向电话查找...
    • 反转phone_numbers并作为参数传入;那么这是一个微不足道的O(1) 在本地范围内的查找。
    • 反向电话号码的好主意。但 iCodez 询问如何使用方法:def phonebook(number) 和基于用户的字典作为键。如果反向字典不可用,则只有完整扫描才会为您提供与数字相关联的名称。
    • 这将需要很长时间,每条评论需要两年时间。我出去了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-06
    • 2015-02-10
    • 1970-01-01
    • 2010-09-24
    相关资源
    最近更新 更多