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

我正忙着用 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.?) )。


白衣染霜花
浏览 250回答 3
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 以避免列表迭代和删除对象的问题。

呼如林

您可以尝试以下方法,虽然效率不高,但可以解决您的问题>>> 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])

RISEBY

做这样的事情:new_list = []append_last = (0, None)for index, obj in enumerate(list):&nbsp; &nbsp; if 'hotfix' in obj['fullDisplayName'] or 'tag' in obj['fullDisplayName']:&nbsp; &nbsp; &nbsp; &nbsp; number = int("tag/1.0.1".split('/')[1].replace('.',''))&nbsp; &nbsp; &nbsp; &nbsp; append_last = (number, index) if append_last[0] < number else append_last&nbsp; &nbsp; else:&nbsp; &nbsp; &nbsp; &nbsp; new_list.append(obj)if append_last[1]:&nbsp; &nbsp; new_list.append(list[append_last[1]])print new_list
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python