Python列表拆分

时间:2013-09-01 14:59:26

标签: python

我只想保留namevalue(键值对) 这是清单。

[{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>

2 个答案:

答案 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 ...

这可以避免在内存中复制大量数据,并且只在循环进行时计算每个元素。