我只想保留name
和value
(键值对)
这是清单。
[{u'domain': u'.facebook.com',
u'expiry': None,
u'name': u'c_user',
u'path': u'/',
u'secure': True,
u'value': u'100001724251788'},
{u'domain': u'.facebook.com',
u'expiry': None,
u'name': u'csm',
u'path': u'/',
u'secure': False,
u'value': u'2'},
{u'domain': u'.facebook.com',
u'expiry': 1441116441,
u'name': u'datr',
u'path': u'/',
u'secure': False,
u'value': u'AUojUqoBUYA2wj4j04GT5XvX'},
{u'domain': u'.facebook.com',
u'expiry': 1441116442,
u'name': u'lu',
u'path': u'/',
u'secure': False,
u'value': u'RitwQJMNRJ8siUh_9eIj4SMw'},
{u'domain': u'.facebook.com',
u'expiry': None,
u'name': u's',
u'path': u'/',
u'secure': True,
u'value': u'Aa7ebY1RvmeilCX8.BSI0od'},
{u'domain': u'.facebook.com',
u'expiry': None,
u'name': u'xs',
u'path': u'/',
u'secure': True,
u'value': u'62%3AjNm_3ySkegf7cg%3A2%3A1378044445%3A10945'},
{u'domain': u'.facebook.com',
u'expiry': 1380636479,
u'name': u'fr',
u'path': u'/',
u'secure': False,
u'value': u'0aU8cfDygWXo1ETQA.AWV9BQIzKARYURFpuxUdXLoXcl8.BSI0od.j_.FIj.AWXjyq2t'},
{u'domain': u'.facebook.com',
u'expiry': None,
u'name': u'sub',
u'path': u'/',
u'secure': False,
u'value': u'64'},
{u'domain': u'.facebook.com',
u'expiry': None,
u'name': u'p',
u'path': u'/',
u'secure': False,
u'value': u'125'},
{u'domain': u'.facebook.com',
u'expiry': None,
u'name': u'presence',
u'path': u'/',
u'secure': True,
u'value': u'EM378046939EuserFA21B01724251788A2EstateFDsb2F0Et2F_5b_5dElm2FnullEuct2F1378043847BEtrFnullEtwF2448105081EatF1378046499377G378046939504CEchFDp_5f1B01724251788F13CC'}]
[Dbg]>>> type(cookies)
<type 'list'>
[Dbg]>>> newlist = [{'domain': i['domain'], 'name': i['name'], 'value': i['value']} for i in cookies]
[Dbg]>>> newlist
[{'domain': u'.facebook.com', 'name': u'c_user', 'value': u'100001724251788'},
{'domain': u'.facebook.com', 'name': u'csm', 'value': u'2'},
{'domain': u'.facebook.com',
'name': u'datr',
'value': u'AUojUqoBUYA2wj4j04GT5XvX'},
{'domain': u'.facebook.com',
'name': u'lu',
'value': u'RitwQJMNRJ8siUh_9eIj4SMw'},
{'domain': u'.facebook.com',
'name': u's',
'value': u'Aa7ebY1RvmeilCX8.BSI0od'},
{'domain': u'.facebook.com',
'name': u'xs',
'value': u'62%3AjNm_3ySkegf7cg%3A2%3A1378044445%3A10945'},
{'domain': u'.facebook.com',
'name': u'fr',
'value': u'0aU8cfDygWXo1ETQA.AWV9BQIzKARYURFpuxUdXLoXcl8.BSI0od.j_.FIj.AWXjyq2t'},
{'domain': u'.facebook.com', 'name': u'sub', 'value': u'64'},
{'domain': u'.facebook.com', 'name': u'p', 'value': u'125'},
{'domain': u'.facebook.com',
'name': u'presence',
'value': u'EM378046939EuserFA21B01724251788A2EstateFDsb2F0Et2F_5b_5dElm2FnullEuct2F1378043847BEtrFnullEtwF2448105081EatF1378046499377G378046939504CEchFDp_5f1B01724251788F13CC'}]
要:
<Cookie>.facebook.com:datr:gyenULkNKjCIJFTYDz2qbp9I
<Cookie>.facebook.com:c_user:120004707330532
<Cookie>.facebook.com:fr:0LglznOeWFepXcvAF.AWVm9awu51UtdvT65f9HqxYXUsI.BQp4ej._Q.AAA.AWW8GKGl
<Cookie>.facebook.com:lu:gg1dq7zzNjC6pd7W9W0SFHnA
<Cookie>.facebook.com:s:Aa5Zmp1zeLF36x3s
<Cookie>.facebook.com:xs:1%3AWvWR_uXSzC3p3w%3A0%3A1374938392
<Cookie>
答案 0 :(得分:5)
要从字典列表中提取任意名称,您可以使用operator.itemgetter()
:
from operator import itemgetter
names = ["name", "value"] # fields to extract
values = itemgetter(*names) # function that extracts values from an input dict
result = [dict(zip(names, values(d))) for d in list_of_dicts]
print(result)
[{'name': u'c_user', 'value': u'100001456251788'},
{'name': u'csm', 'value': u'2'},
{'name': u'datr', 'value': u'AUojdfkBUYA2wj4j04GT5XvX'}]
答案 1 :(得分:3)
您可以使用所谓的“列表理解”来剔除您想要的键/值对:
new_list = [{'name':x['name'], 'value':x['value']} for x in list]
一点额外的解释:这样做是循环list
中的条目,将每个条目分配给x
,然后将该值应用于前面的表达式,在本例中
{'name':x['name'], 'value':x['value']}
这可以快速从一个更全面的列表中剔除您想要的元素,或者创建一个新列表,您可以使用现有列表的元素中的简单表达式来定义。
也可以通过用大括号[]
替换外方括号{}
来制作新词典。
另外:如果您要将新列表提供给循环,并且您的原始数据集非常大,您可以创建一个“生成器”,这就像一个列表,您可以循环但不会不要将新的数据子集存储在内存中。使用括号[]
替换方括号()
。
new_generator = ({'name':x['name'], 'value':x['value']} for x in list)
for element in new_generator:
... do whatever ...
这可以避免在内存中复制大量数据,并且只在循环进行时计算每个元素。