通过python中的自定义规则从词典列表中创建有序列表

如何解决通过python中的自定义规则从词典列表中创建有序列表

编辑:我需要更改规则。 我有这样的词典列表:

A=[{0:[(0,2,1),(0,1,1)]},{1:(0,3)},{2:[(1,2)]},{3:(0,4),(1,4)}]

首先,我需要计算每个字典中的元素数量。 其次,将每个列表中的一个元素的最后两个元素相乘(因为在每个列表中,最后两个元素相同),如下所示:

M=[(0,2),3,(2,4,(3,3)]

一个元素是键,第二个是最后两个元素的乘积,第三个是该列表中元素的数量。 (我不需要打印此部分) 然后为每个列表计算乘法/选项,如下所示:

B=[(0,2/2),3/1),4/1),4/3)]

我需要输出为键列表,第二个元素从大到小:

output: [2,0]

有人有什么想法可以帮助您吗?

解决方法

根据修改的新解决方案

t=[{0:[(0,2,1),(0,1,1)]},{1:[(0,3)]},{2:[(1,2)]},{3:[(0,4),(1,4)]}]

step_one=[]

for i in t:
    key_list=list(i.keys())
    value_list=list(i.values())
    first=key_list[0]
    second=value_list[0][0][-1]*value_list[0][0][-2]
    third=len(value_list[0])
    step_one.append((first,second,third))

print(step_one) # [(0,2),3,(2,4,(3,3)]

step_two=[(i,j/k) for i,j,k in step_one]

step_three=[i for i,j in sorted(step_two,key=lambda x:-x[1])]

print(step_three) # [2,3]

这项工作有效吗?使用key参数执行排序

t=[{0:[(0,3),1)]}]
sorted_t=sorted(t,key=lambda x:len(list(x.values())[0]))
result=[list(i.keys())[0] for i in sorted_t]
print(result) # [1,3]

故障

sorted_t=sorted(t,key=lambda x:len(list(x.values())[0]))

这将基于每个元素的“字典中第一个值的长度”对列表进行排序

结果:[{1: [(0,{0: [(0,{3: [(0,1)]}]

然后遍历sorted_t并获取“排序列表中每个字典的键”,[0]用于从“键列表”中索引元素。否则,您将以类似[[1],[0],[3]]

的列表结尾 ,

如果词典要使用多个键,则可以使用此方法

from collections import defaultdict

A = [{0: [(0,3)],2: [(0,{1: [(0,4: [(0,1)]}
]
dd = defaultdict(list)

for dictionary in A:
    for k,v in dictionary.items():
        dd[len(v)].append(k)

result = [k[1] for k in sorted(dd.items(),key=lambda x: x[0])]
print(result)

输出:

[[2,1],[4,3]]
,

@python_learner和@woblob击败了我,我非常同意他们的回答。但是,我只是想添加一种替代方法(至今仍类似),让您在找到排名后访问元组列表。

最后以keys的列表(按其排名,即[1,3])排序,您已经丢失了元组列表所在位置的信息。

要恢复元组列表,您需要再次遍历A并搜索keys,但是如果A包含使用同一键的多个字典,则可能会出现问题

因此,以下方法可以保护index_of_A,在A中可以找到具有一定等级的每个键。

# I've added missing brackets in the element of A,{3:[..]}
A=[{0:[(0,1)]}]

# A is a list of dicts
# Each dict has only one (numerical) key,# -> resolving to a list of tuples

# run over A and create a new Rank dict,where keys are
# the keys from the dicts in A,and values are tuples of
# the ranks and and index in A for which to locate the lists again.
ranks = {}
for index_of_A,dictionary in enumerate(A):
  for key,list_of_tuples in dictionary.items():
    ranks[key] = (len(list_of_tuples),index_of_A)


# https://stackoverflow.com/questions/613183/how-do-i-sort-a-dictionary-by-value
sorted_ranks = {k: v for k,v in sorted(ranks.items(),key=lambda item: item[1])}


# Get Ranks,key and the list of tuples,and perform some work on them..
for key_of_A,(rank,index_of_A) in sorted_ranks.items():
  print("Do some work on: Rank %d | Key %d | List %s" % (rank,key_of_A,str(A[index_of_A])))
  do_some_work(index_of_A)


# The Keys sorted by their ranks
print ("keys sorted by rank: " + str([key for key in sorted_ranks]))

输出:

Rank 1 | Key 1 | List {1: [(0,3)]}
Rank 2 | Key 0 | List {0: [(0,3)]}
Rank 3 | Key 3 | List {3: [(0,1)]}

keys sorted by rank: [1,3]

编辑:注释中要求它显示如何对数据进行一些处理,因此我在下面添加了该函数,并在上面的工作循环中添加了对其的调用。

# Added a function for doing some work as requesed in comments
def do_some_work(index_of_A):
  # A is a global variable
  a_dict = A.pop(index_of_A)
  # do whatever with the data ..

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?