Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 选择最小值并删除最大值_Python_Python 2.7 - Fatal编程技术网

Python 选择最小值并删除最大值

Python 选择最小值并删除最大值,python,python-2.7,Python,Python 2.7,我有一个文本文件,其中包含如下数据 EASSDS.txt 2738 EQQSDS7M.txt 394 EOG66.txt 354 EASSDS.txt 292 EQQSDS7M.txt 301 我希望它只选择最小值,删除最大值 Output.txt EOG66.txt 354 EASSDS.txt 292 EQQSDS7M.txt 301 如果它发现了重复项,它只选择最小值的问题,就像我在输出和输入中显示的那样 下面是我试过的代码 with open('input.txt') as nums

我有一个文本文件,其中包含如下数据

EASSDS.txt 2738
EQQSDS7M.txt 394
EOG66.txt 354
EASSDS.txt 292
EQQSDS7M.txt 301
我希望它只选择最小值,删除最大值
Output.txt

EOG66.txt 354
EASSDS.txt 292
EQQSDS7M.txt 301
如果它发现了重复项,它只选择最小值的问题,就像我在输出和输入中显示的那样

下面是我试过的代码

with open('input.txt') as nums:
    lines = re.findall(r'\w+\.txt\s+\d+', nums.read())

numbers = {}
for line in lines:
    line_split = re.split(r'\.txt\s+', line)
    count = line_split[1]
    numbers[line_split[0]] = int(line_split[1])

您就快到了,但请记住,如果您已经为数字编制了索引,您需要一些分支逻辑,如下所示:

number = {}
for line in lines:
    split_line = line.split()
    if numbers.get(split_line[0], False):
        numbers[split_line[0]] = min(numbers[split_line[0]], int(split_line[1]))
    else:
        numbers[split_line[0]] = int(split_line[1])

另外,如果我错了,请纠正我,但似乎您的值之间总是有一个空格,因此您不需要打破正则表达式拆分锤,减少正则表达式总是好的。但是,如果您的测试集中出现了某些问题,请告诉我。

您就快到了,但是请记住,如果您已经为数字编制了索引,您需要一些分支逻辑,例如:

number = {}
for line in lines:
    split_line = line.split()
    if numbers.get(split_line[0], False):
        numbers[split_line[0]] = min(numbers[split_line[0]], int(split_line[1]))
    else:
        numbers[split_line[0]] = int(split_line[1])

另外,如果我错了,请纠正我,但似乎您的值之间总是有一个空格,因此您不需要打破正则表达式拆分锤,减少正则表达式总是好的。但是,如果您的测试集中出现了某些问题,请告诉我。

我将在这里使用一种简单的方法,使用
defaultdict

>>> from collections import defaultdict
>>> m = defaultdict(list)
>>> with open('testFile.txt' ,'r') as f:
        for line in f:
            name, val = line.split()
            m[name].append(val)
>>> m
defaultdict(<type 'list'>, {'EOG66.txt': ['354'], 'EASSDS.txt': ['2738', '292'], 'EQQSDS7M.txt': ['394', '301']})
>>> with open('output.txt', 'w') as f:
        for elem in m:
            f.write("{} {}\n".format(elem, min(map(int, m[elem]))))

我只想在这里使用
defaultdict
的简单方法

>>> from collections import defaultdict
>>> m = defaultdict(list)
>>> with open('testFile.txt' ,'r') as f:
        for line in f:
            name, val = line.split()
            m[name].append(val)
>>> m
defaultdict(<type 'list'>, {'EOG66.txt': ['354'], 'EASSDS.txt': ['2738', '292'], 'EQQSDS7M.txt': ['394', '301']})
>>> with open('output.txt', 'w') as f:
        for elem in m:
            f.write("{} {}\n".format(elem, min(map(int, m[elem]))))

@HunterMcMillen我添加了代码你真的需要在这里使用正则表达式吗?@SukritKalra nope,我很肯定我的答案没有使用正则表达式。@SukritKalra这是我的观点,可能是错误的,也可能是不好的方法,这就是我为什么在这里发布的原因,如果你有比我更好的答案或代码welcome@HunterMcMillen我添加了代码你真的需要在这里使用正则表达式吗?@SukritKalra nope,我的答案肯定没有。@SukritKalra这是我的观点,可能是错误的,也可能是一种不好的方式,这就是为什么我在这里发帖子,如果你的答案或代码比我好的话是的,文本文件每次都有空间,在值和文件之间,如
ERWEFA.txt 233
是的,文本文件每次都有空间,在值和文件之间,如
ERWEFA.txt 233
我相信OP是想删除任何超过最小值的值,但是如果保留它们没有问题,回答很好。@SlaterTyranus:是的,这在某种程度上取决于他在输入文件中有多少数据。:)我相信OP希望删除任何高于最小值的值,但如果保留这些值没有问题,答案很好。@SlaterTyranus:是的,这在某种程度上取决于他在输入文件中有多少数据。:)