Python 多维列表-通过公共字符串元素Y对整数元素X求和
我有一个多维列表:Python 多维列表-通过公共字符串元素Y对整数元素X求和,python,arrays,multidimensional-array,Python,Arrays,Multidimensional Array,我有一个多维列表: multiDimList = [['a',1],['a',1],['a',1],['b',2],['c',3],['c',3]] multiDimListSum = [['a',3],['b',2],['c',6]] 我试图对元素[1]的实例求和,其中元素[0]是常见的 更清楚地说,我想要的输出是另一个多维列表: multiDimList = [['a',1],['a',1],['a',1],['b',2],['c',3],['c',3]] multiDimListSu
multiDimList = [['a',1],['a',1],['a',1],['b',2],['c',3],['c',3]]
multiDimListSum = [['a',3],['b',2],['c',6]]
我试图对元素[1]
的实例求和,其中元素[0]
是常见的
更清楚地说,我想要的输出是另一个多维列表:
multiDimList = [['a',1],['a',1],['a',1],['b',2],['c',3],['c',3]]
multiDimListSum = [['a',3],['b',2],['c',6]]
我知道我可以访问,比如说multiDimList
中的值“2”
x = multiDimList [3][1]
因此,我可以获取单个元素,并可能构建某种函数来完成这项工作,但这将是令人厌恶的
有人对如何进行pythonical操作有什么建议吗?假设您的实际序列具有与示例中相似的分组元素(所有
'a'
,'b'
等的实例一起),您可以使用和:
假设您的实际序列具有与示例中相似的分组元素(将
'a'
,'b'
等的所有实例组合在一起),您可以使用和:
您可以使用
dict
来累加与每个字符串相关联的总数
d = {}
multiDimList = [['a',1],['a',1],['a',1],['b',2],['c',3],['c',3]]
for string, value in multiDimList:
# Retrieves the current value in the dict if it exists or 0
current_value = d.get(string, 0)
d[string] += value
print d # {'a': 3, 'b': 2, 'c': 6}
然后,您可以通过使用
d[“b”]
访问b
的值。您可以使用dict
累积与每个字符串相关的总数
d = {}
multiDimList = [['a',1],['a',1],['a',1],['b',2],['c',3],['c',3]]
for string, value in multiDimList:
# Retrieves the current value in the dict if it exists or 0
current_value = d.get(string, 0)
d[string] += value
print d # {'a': 3, 'b': 2, 'c': 6}
然后,您可以使用
d[“b”]
访问b
的值。Zero Piraeus的回答涵盖了按顺序分组字段条目的情况。如果他们不是,那么下面的内容是简短且合理有效的
from collections import Counter
reduce(lambda c,x: c.update({x[0]: x[1]}) or c, multiDimList, Counter())
这将返回一个集合,可通过元素名称访问。如果您喜欢将其作为列表,可以对其调用.items()方法,但请注意,即使在输入顺序一致的情况下,输出中标签的顺序也可能与输入中标签的顺序不同。Zero Piraeus的回答涵盖了字段条目按顺序分组的情况。如果他们不是,那么下面的内容是简短且合理有效的
from collections import Counter
reduce(lambda c,x: c.update({x[0]: x[1]}) or c, multiDimList, Counter())
这将返回一个集合,可通过元素名称访问。如果您喜欢将其作为列表,可以对其调用.items()方法,但请注意,即使在输入顺序一致的情况下,输出中标签的顺序也可能与输入中标签的顺序不同。您所说的恶心是什么意思,任何解决问题的方法都是合理的,只要能得到理想的结果。你当然是对的。只是我倾向于写糟糕的代码,作为一个没有经验的程序员,我很自嘲。我总是试着举例说明我试过的方法,但在这种情况下,我觉得我太离谱了。你说的恶心是什么意思,任何解决问题的方法都是合理的,只要得到了理想的结果。你当然是对的。只是我倾向于写糟糕的代码,作为一个没有经验的程序员,我很自嘲。我总是试着提供一些我已经试过的例子,但是在这个例子中,我觉得我太离谱了。正如你所预料的,我没有在我的例子中包括问题的所有细微差别。首先,我将你的回答与以下内容结合起来:正如你所预料的,我没有在我的示例中包含问题的所有细微差别。首先对我的列表进行排序,我将您的答案与以下内容结合起来:可能值得一提的是,
reduce()
不再是Python 3.x中内置的,必须从functools
导入。但是是的,这是一个很好的解决方案,输入没有分组。可能值得一提的是,reduce()
不再是Python 3.x中的内置项,必须从functools
导入。但是,这是一个很好的解决方案,输入没有分组。