对不起,如果标题混淆,我希望我的解释会更清楚。我也有一个工作方法,但我希望它能得到改进,特别是因为它有一个缺陷。我还尽我所能广泛地搜索了我的问题,但没有找到与之匹配的东西
所以我有下面的清单,看起来像
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行,如果你数钞票的话)包含在个人中
我相信这应该满足您的要求:
因此,我没有创建一个全新的名称列表,而是逐个字典地浏览列表,并比较name属性
如果名称小于
current_name
(首先设置为第一个字典的名称),那么我们将根据项的索引设置企业和个人列表,并跳出for循环。否则,它们的名称将设置为current_name
相关问题 更多 >
编程相关推荐