为什么这种有条件的词典理解不起作用?

时间:2015-08-21 11:05:57

标签: python python-3.x

当我运行它时,当我期望包含profile_fields中列出的键的新{}时,它会返回dict。我做错了什么?

import datetime

user = {'email_optin': False, 'paid': 0, 'location': None, 'account_state': 'enabled', 'ip_address': '1.1.1.1', 'modified_timestamp': 1440107582, 'image': None, 'created': datetime.datetime(2015, 8, 20, 21, 53, 2, 436540), 'website': None, 'public_key': None, 'last_seen': datetime.datetime(2015, 8, 20, 21, 53, 2, 434959), 'full_name': None, 'user_id': 'jk4vv6cucgxtq6s4i3rgmdcwltvva2fl', 'confirmed': False, 'twitter': None, 'email_address': 'h@example.org', 'modified': datetime.datetime(2015, 8, 20, 21, 53, 2, 436554), 'password': '$5$rounds=110000$HnkKE5jWtb1I1cps$dOu0PeijD.enkVd85ofpVpI.1p9wpAsx8fLLSENEuQ1', 'github': None, 'created_timestamp': 1440107582, 'subscription_plan': '', 'user_name': 'xdc'}



profile_fields = [
'location,'
'email_address,'
'full_name,'
'github,'
'image,'
'public_key,'
'twitter,'
'user_id,'
'user_name,'
'website'
]

profile = {k:v for k,v in user.items() if k in profile_fields }
print('profile')
print(profile)

编辑:上面的问题是我十六小时编码日即将结束的消息。

4 个答案:

答案 0 :(得分:4)

因为您已将逗号放在引号内而不是外部。您的列表profile_fields只包含一个字符串文字。

答案 1 :(得分:1)

您可以定义profile_fields列表,如

profile_fields = [
        'location', 'email_address', 'full_name',
        'github', 'image', 'public_key', 'twitter',
        'user_id', 'user_name','website'
            ]

您可以使用PEP 8

答案 2 :(得分:0)

您的列表存在问题。应该这样,

profile_fields = ['location','email_address','full_name','github','image','public_key','twitter','user_id','user_name','website']

答案 3 :(得分:0)

您的profile_list实际上应该是这样的:

profile_fields = [
    'location',
    'email_address',
    'full_name',
    'github',
    'image',
    'public_key',
    'twitter',
    'user_id',
    'user_name',
    'website'
]

如上所述,逗号应该之外构成字符串的引号。您当前有一个列表,其中包含一个永远不会匹配user字典中任何键的单个元素。这是一个简单的解决方法。