显示嵌套字典的条目
Display entries of nested dict
我有一个嵌套的字典,如下所示:
17733124060: {'PhoneOwner': u'Bob', 'Frequency': 0},
18444320737: {'PhoneOwner': u'Sarah', 'Frequency': 1},
18444320742: {'PhoneOwner': u'Jane', 'Frequency': 0}
我希望能够 运行 如果频率为 0,则返回密钥 17733124060 和 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
,因为这是一个内置 Python 函数。
for phoneNumber, PhoneOwner, Frequency in dict.iteritems():
您正在尝试将两个值(dict.itertimes()
returns 二元组)解包为 3 个变量。相反,您应该首先遍历外部字典,然后评估嵌套字典:
for phoneNumber, inner_dict in phonenumbers.iteritems():
if inner_dict['Frequency'] == 0:
print str(phoneNumber) + inner_dict['PhoneOwner']
另一种方法是使用内置方法 filter,您可以根据条件过滤字典 (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
我有一个嵌套的字典,如下所示:
17733124060: {'PhoneOwner': u'Bob', 'Frequency': 0},
18444320737: {'PhoneOwner': u'Sarah', 'Frequency': 1},
18444320742: {'PhoneOwner': u'Jane', 'Frequency': 0}
我希望能够 运行 如果频率为 0,则返回密钥 17733124060 和 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
,因为这是一个内置 Python 函数。
for phoneNumber, PhoneOwner, Frequency in dict.iteritems():
您正在尝试将两个值(dict.itertimes()
returns 二元组)解包为 3 个变量。相反,您应该首先遍历外部字典,然后评估嵌套字典:
for phoneNumber, inner_dict in phonenumbers.iteritems():
if inner_dict['Frequency'] == 0:
print str(phoneNumber) + inner_dict['PhoneOwner']
另一种方法是使用内置方法 filter,您可以根据条件过滤字典 (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