为了账号安全,请及时绑定邮箱和手机立即绑定

如何根据字符串中的值删除列表中的字典项

如何根据字符串中的值删除列表中的字典项

白衣染霜花 2022-01-11 17:24:34
我正忙着用 python 2.7 提取数据到目前为止,我得到了一个包含字典作为项目的列表。两天来,我对此无法进一步了解。数据:list = [    {        'displayName': '#12',        'timestamp': 1543588481684,        'number': 12,        'result': 'SUCCESS',        'fullDisplayName': 'Configs \xbb Virtual Host #12'    },    {           'displayName': '#64',        'timestamp': 1544432646765,        'number': 64,        'result': 'SUCCESS',        'fullDisplayName': 'Configs \xbb Development Virtual Host Deploy #64'    },    {        'displayName': '#15',        'timestamp': 1544432258338,        'number': 15,        'result': 'SUCCESS',        'fullDisplayName': 'Configs \xbb Virtual Host #15'    },    {           'displayName': '#61',        'timestamp': 1554186520499,        'number': 61,        'result': 'SUCCESS',        'fullDisplayName': 'Docker \xbb Configs Deploy \xbb release/1.0.0 #61'    },    {           'displayName': '#5',        'timestamp': 1554274310468,        'number': 5,        'result': 'SUCCESS',        'fullDisplayName': 'Docker \xbb Configs Deploy \xbb release/1.0.2 #5'    },    {           'displayName': '#1',        'timestamp': 1554289674392,        'number': 1,        'result': 'SUCCESS',        'fullDisplayName': 'Docker \xbb Configs Deploy \xbb release/1.0.3 #1'    },    {           'displayName': '#1',        'timestamp': 1554290695120,        'number': 1,        'result': 'SUCCESS',        'fullDisplayName': 'Docker \xbb Configs Deploy \xbb release/1.0.4 #1'    },    {   'displayName': '#1',        'timestamp': 1554292855198,        'number': 1,        'result': 'SUCCESS',        'fullDisplayName': 'Docker \xbb Configs Deploy \xbb release/1.0.5 #1'    },    {           'displayName': '#1',        'timestamp': 1554381545158,        'number': 1,        'result': 'SUCCESS',        'fullDisplayName': 'Docker \xbb Configs Deploy \xbb release/1.0.7 #1'    },我想删除列表中的字典项,其中 'fullDisplayName' contains('hotfix','tag') 但保留最后一个列表项(具有最高版本值的字典 (hotfix/1.0.?) )。
查看完整描述

3 回答

?
千万里不及你

TA贡献1784条经验 获得超9个赞

  1. 寻找所需的关键字

  2. 检查更高版本

  3. 必要时删除项目

伪代码:

for item in list:

    if dictContainsKeyword(item, "hotfix") or dictContainsKeyword(item, "tag"):

        if listContainsNewerVersion(list, item):

            removeDictFromList(list, item)

对于 dictContainsKeyword、listContainsNewerVersion 和 removeDictFromList,您需要选择具有唯一值的字典属性。或者使用一组属性来识别单个字典。


在 listContainsNewerVersion 中,您可以遍历列表并将字典与给定的字典进行比较。


编辑:更改为 for each loop 以避免列表迭代和删除对象的问题。


查看完整回答
反对 回复 2022-01-11
?
呼如林

TA贡献1798条经验 获得超3个赞

您可以尝试以下方法,虽然效率不高,但可以解决您的问题


>>> list1 = [i for i in list if 'tag' not in i['fullDisplayName']]

>>> list2 = [i for i in list if 'tag' in i['fullDisplayName']]

>>> from operator import itemgetter

>>> newlist = sorted(list2, key=itemgetter('displayName'), reverse=True)

>>> list1.append(newlist[0])


查看完整回答
反对 回复 2022-01-11
?
RISEBY

TA贡献1856条经验 获得超5个赞

做这样的事情:


new_list = []

append_last = (0, None)

for index, obj in enumerate(list):

    if 'hotfix' in obj['fullDisplayName'] or 'tag' in obj['fullDisplayName']:

        number = int("tag/1.0.1".split('/')[1].replace('.',''))

        append_last = (number, index) if append_last[0] < number else append_last

    else:

        new_list.append(obj)

if append_last[1]:

    new_list.append(list[append_last[1]])

print new_list


查看完整回答
反对 回复 2022-01-11
  • 3 回答
  • 0 关注
  • 249 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信