【发布时间】:2021-01-24 05:49:46
【问题描述】:
对不起,如果标题令人困惑,我希望我的解释会更清楚。我也有一个工作方法,但我希望它可以改进,特别是因为有一个缺陷。我还根据我的能力广泛搜索了我的问题,但没有找到与之匹配的内容。
所以我有以下看起来像的字典列表
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”第二次重复出现时拆分,而是在字母表循环后的第一次重复出现时拆分。
如前所述,我确实有一种工作方法,但我认为它效率低下并且是一种黑客行为。参数响应是一个字典列表,它们都具有相同的键,其中一个键是“名称”。
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)
我将其视为 hack 的原因是它实际上并没有对 dicts 列表进行排序,而是从 dicts 列表中提取每个名称,然后使用 for 循环和 if 条件对其进行排序。然后,我必须找到将其拆分的索引。此外,还有一个缺陷是它只会分裂一次。从理论上讲,如果字母数字要在个人之后重置,它会按照第 16 行(或者如果您计算注释,则为第 17 行)包含在个人中。
【问题讨论】:
标签: python python-3.x list sorting