我正在尝试通读元组并对其进行排序。我想按列表中的第一个单词分组,并保持列表中第三个单词最小。然后,我希望它返回保留的列表的整个列表。
我找到了一个非常有用的示例here,但我希望使用包含三个单词而不是两个单词的列表来完成此操作。
我得到的当前输出是:
grape 3
apple 4
banana 1
我想要的输出是:
grape lemon 3
apple banana 4
banana pie 1
我真的只是想从列表中得到第二个单词。我怎样才能做到这一点?
import itertools
import operator
L = [('grape', 'orange', 100), ('grape', 'lemon', 3), ('apple', 'kiwi', 15),
('apple', 'pie', 10), ('apple', 'banana',4), ('banana', 'pie', 1),
('banana', 'kiwi', 2)]
it = itertools.groupby(L, operator.itemgetter(0))
for key, subiter in it:
print(key, min(item[2] for item in subiter))
答案 0 :(得分:3)
您的问题似乎与static void TestRegex(char[] check_chars)
{
string[] inputs = { "54323.5", "543g23.5" };
var check_chars2 = check_chars.Select(c => Regex.Escape(c.ToString()));
string pattern = "^(" + string.Join("|", check_chars2) + ")+$";
foreach (string input in inputs)
{
WriteLine($"Input {input} does{(Regex.IsMatch(input, pattern) ? "" : " not")} match");
}
}
// Output:
// Input 54323.5 does match
// Input 543g23.5 does not match
无关,但与itertools.groupby
有关。
要恢复第三值最小的元组,请使用min
函数的key
参数。
min
import itertools
import operator
L = [('grape', 'orange', 100), ('grape', 'lemon', 3), ('apple', 'kiwi', 15),
('apple', 'pie', 10), ('apple', 'banana',4), ('banana', 'pie', 1),
('banana', 'kiwi', 2)]
it = itertools.groupby(L, operator.itemgetter(0))
for key, group in it:
print(*min(group, key=operator.itemgetter(2))) # Use the key argument of min