如何按第二个重复周期拆分列表

2024-09-28 13:17:21 发布

您现在位置:Python中文网/ 问答频道 /正文

对不起,如果标题混淆,我希望我的解释会更清楚。我也有一个工作方法,但我希望它能得到改进,特别是因为它有一个缺陷。我还尽我所能广泛地搜索了我的问题,但没有找到与之匹配的东西

所以我有下面的清单,看起来像

names = [
  {"name" : "1231 GROUP LLC,.", "address": ""},
  {"name" : "Brick Pizza", "address": ""},
  {"name": "Zone Fitness", "address": ""},
  {"name": "Alderson, Kevin", "address": ""},
  {"name": "Alderson, Joanne", "address": ""}
  {"name": "Ave, John", "address": ""},
  {"name": "Zow, Peter", "address": ""}
]

前三项是企业,后三项是个人。我正试图根据它们的键name以及它们是企业还是个人来划分它们(例如,按企业与个人排序)

众所周知,数据集从企业开始,然后是个人,每个数据集按字母数字[或字母顺序]排序。个人的名字中不能有数字,因此集合的第一部分[业务]是字母数字,而个人则严格按字母顺序排列,但可能更愿意将两者都视为字母数字,特别是因为缺陷[解释如下]

第二,需要注意的是,名字中的第一个字符可能会再次重复,即有三个人的姓氏以A开头,但考虑到他们的全名,Alderson位于Ave之前。另外,两个人的姓氏完全相同。同样的情况也可能发生在商业部门。它不应该在“业务”下的“A”第二次重复出现时分开,而是在循环使用字母表后的第一次重复出现时分开

如前所述,我确实有一种工作方法,但我认为它效率低下,是一种黑客行为。参数响应是一个dict列表,其中所有dict都有相同的键,其中一个键是“name”

def sort_politics(response):   
    #names is also equal to the the list-dict format provided.
    names = [v for dic in response for k, v in dic.items() if k == 'name']
    first_name = names[0]
    second_name = ""
    for name in names:
        if name == first_name:
            continue
        if name >= second_name:
            second_name = name
        elif name <= second_name:
            print("start's over with {0}".format(name))
            second_name = name
            break
        continue
    businesses = response[0:names.index(second_name)]
    individuals = response[names.index(second_name):]
    print(businesses)
    print(individuals)

我之所以将其视为黑客攻击,是因为它实际上并没有对dict列表进行排序,而是从dict列表中提取每个名称,然后使用for循环和if条件进行排序。然后,我必须找到要分割的索引。此外,还有一个缺陷,即它只会拆分一次。从理论上讲,如果字母数字是在个人之后重置的,那么它将按照第16行(或第17行,如果你数钞票的话)包含在个人中


Tags: namein列表forifnames排序address
1条回答
网友
1楼 · 发布于 2024-09-28 13:17:21

我相信这应该满足您的要求:

def sort_politics(response):
    businesses = []
    individuals = []

    current_name = response[0]['name']

    for index, item in enumerate(response):
        if item['name'] < current_name:
            businesses = response[:index]
            individuals = response[index:]
            break
        else:
            current_name = item['name']

    return businesses, individuals

因此,我没有创建一个全新的名称列表,而是逐个字典地浏览列表,并比较name属性

如果名称小于current_name(首先设置为第一个字典的名称),那么我们将根据项的索引设置企业和个人列表,并跳出for循环。否则,它们的名称将设置为current_name

相关问题 更多 >

    热门问题