python - Python:如何使用正则表达式对字典值进行排序
问题描述
我有两个 .txt 文件,它将它们读入字典。我想要一个选项,我可以使用正则表达式从最高到最低对字典中的值(文件中的第三个选项卡)进行排序。
这是我的文件: file1.txt
file Marvel/GuardiansOfGalaxy 300 1
file DC/Batman 504 1
file GameOfThrones 900 0
file DC/Superman 200 1
file Marvel/CaptainAmerica 342 0
文件2.txt
file Science/Biology 200 1
file Math/Calculus 342 0
file Psychology 324 1
file Anthropology 234 0
file Science/Chemistry 444 1
这是假定的输出:
Game of Thrones: 900
DC/Batman: 404
Science/Chemistry: 444
Marvel/CaptainAmerica 342
Math/Calculus 342
...
到目前为止,这就是我的代码的样子。我无法使用正则表达式根据值(第三个选项卡)以排序方式显示数据。读取功能有效。现在这一切都取决于显示排序的字典:
def read():
pattern = re.compile(r"file\.py (.+).*? (\d+) \d+")
data_files = []
for file in glob.glob("*.txt"):
with open(file, 'r') as filenames:
data_files.append(dict(pattern.findall(filenames.read())))
return data_files
这是我尝试使用 re.findall 和 map(int,) 对字典中的值进行排序的地方,但我得到了一个 TypeError。我无法确定我哪里出错了。这是我主要需要帮助的部分:
def display(data_files):
for lines in data_files:
# print(lines)
pattern_sort = re.findall(r"file\.py (.+).*? (\d+) \d+", data_files)
print(sorted(lines, key=lambda x: (map(int, pattern_sort))))
我希望这是有道理的。谢谢!
解决方案
正如FailSafe所说,没有理由为此使用regex
,所以我split
改用了。我稍后会regex
为这个问题添加一个解决方案,但这里是如何在没有regex
.
import glob
from collections import namedtuple
# A lightweight object.
# Makes it easier to sort.
Entry = namedtuple("Entry", "name views")
def read():
data_files = []
for file in glob.glob("*.txt"):
with open(file, 'r') as infile:
for line in infile.read().splitlines():
# For each line in the file
# Split apart our line
line = line.split(' ')
# Create an Entry object with our name and views
# and add it to our data_files.
data_files.append(Entry(line[1], int(line[2])))
return data_files
result = read()
# We want to sort based on views so return the views.
def sort_meth(x):
return x.views
# If you want to sort by views then name you can do
# return (x.views, x.name)
# Sort our result
result.sort(key=sort_meth, reverse=True)
for entry in result: # Print each entry
print(entry.name, entry.views)
推荐阅读
- reporting-services - SSRS 选择参数月份并更改参数。本月的第一天和最后一天
- javascript - Promise.all 无法与 Mongo 查询数组一起正常工作
- c++ - 自定义构建文件更改不会触发 VS 2017 中的项目重建
- java - 简单的冒险游戏产生错误的输出,编译时没有错误
- javascript - 两个html文件和一个javascript文件,用jquery改变
- python - 添加一个可以将数值分成低中位数和高段的列?
- html - 如何使用我当前的代码将我的视频放入下拉菜单中?
- c++ - 在指向现有内存地址的 hpp 文件中声明成员函数的最佳方法
- php - Laravel SQLSTATE[HY000] [2002] 连接被拒绝但修补程序可以工作
- haskell - 为什么类型 f (fbc) (f (fab) (fac)) 不匹配 (.)?