Python 显示嵌套dict的条目

Python 显示嵌套dict的条目,python,dictionary,nested,Python,Dictionary,Nested,我有一个嵌套的dict,看起来像这样: 17733124060: {'PhoneOwner': u'Bob', 'Frequency': 0}, 18444320737: {'PhoneOwner': u'Sarah', 'Frequency': 1}, 18444320742: {'PhoneOwner': u'Jane', 'Frequency': 0} 我希望能够运行一个查询,返回键17733124060,如果频率为0,则返回PhoneOwner Bob 到目前为止,我已经: for

我有一个嵌套的dict,看起来像这样:

17733124060: {'PhoneOwner': u'Bob', 'Frequency': 0}, 
18444320737: {'PhoneOwner': u'Sarah', 'Frequency': 1}, 
18444320742: {'PhoneOwner': u'Jane', 'Frequency': 0}
我希望能够运行一个查询,返回键17733124060,如果频率为0,则返回PhoneOwner Bob

到目前为止,我已经:

for phoneNumber, PhoneOwner, Frequency in dict.iteritems():
    if Frequency == 0:
    print phoneNumber + PhoneOwner
但当我运行此命令时,会出现一个错误:

for phoneNumber, PhoneOwner, Frequency in phoneNumberDictionary.iteritems():
ValueError: need more than 2 values to unpack

我在哪里遗漏了什么?

您可以使用列表理解,首先构建匹配条目的列表,然后按如下方式打印它们:

my_dict = {
    17733124060: {'PhoneOwner': u'Bob', 'Frequency': 0}, 
    18444320737: {'PhoneOwner': u'Sarah', 'Frequency': 1}, 
    18444320742: {'PhoneOwner': u'Jane', 'Frequency': 0}}

zero_freq = [(k, v['PhoneOwner']) for k, v in my_dict.items() if v['Frequency'] == 0]

for number, owner in zero_freq:
    print number, owner
这将显示以下内容:

17733124060 Bob
18444320742 Jane
另外,为了以防万一,不要将字典命名为dict
dict
,因为这是一个内置的Python函数

用于dict.iteritems()中的电话号码、电话所有者、频率:

您正在尝试将两个值(
dict.itertimes()
返回2元组)解压为3个变量。相反,您应该首先迭代外部dict,然后计算嵌套dict:

for phoneNumber, inner_dict in phonenumbers.iteritems():
    if inner_dict['Frequency'] == 0:
        print str(phoneNumber) + inner_dict['PhoneOwner']

另一种方法是使用内置方法,根据您的条件过滤字典(
sub_d[Frequency]==0
),方法如下:

>>> d
{17733124060L: {'Frequency': 0, 'PhoneOwner': u'Bob'}, 18444320742L: {'Frequency': 0, 'PhoneOwner': u'Jane'}, 18444320737L: {'Frequency': 1, 'PhoneOwner': u'Sarah'}}
>>> for i in filter(lambda s:d[s]['Frequency']==0, d):
    print '%d %s' % (i, d[i]['PhoneOwner'])


17733124060 Bob
18444320742 Jane

请注意,在尝试将phoneNumber与PhoneOwner连接时,可能会遇到另一个错误,因为无法将int与str连接。因此,您需要将int转换为字符串(
str(phoneNumber+[…])
),或者让print函数通过将值作为不同的参数来执行此操作:
print phoneNumber,PhoneOwner
将打印两个由空格分隔的值。