如何在 Python 2.6 中分离和遍历元组列表中的数据?
How can I separate and traverse data in a list of tuples in Python 2.6?
背景
更新:这是我正在使用的 the horrendous list(请原谅列表的虚假标题)。长度和数据可能会发生变化,因为我正在从 ever-changing 数据库中检索此信息。
期望的结果
我将进一步解释我的目的,因为我不确定最好的方法。每个数字代表一个 ID ,如下所述。我需要创建一个 XML 文件,其中软件元素的目标 sub-elements 基于元组中匹配的 SoftwareID 和 TargetID。
例如:
SoftwareID TargetID XML Representation
----------------------------------------------------------------------
65 115 <-- This Software element (id=65) has only one Target
sub-element (id=115)
138 218 <-- This Software element (id=138) will have multiple
138 219 Target sub-elements (ids=218, 219, 220)
138 220
尝试
我已经按照 here 的方式对序列进行解包,但是对于这个实现来说列表太长了。我收到一个 错误 ,上面写着 太多值无法解包 。
我现在看到这实际上是一个 元组列表 而不是一个元组,所以这无论如何都行不通。
我已经尝试了 this 实现,但得到一个 错误 说 元组 object 没有属性'split'.
至于我的其余实现,我无法分离这个愚蠢的列表。
问题
- 如何从这个元组列表中分离数据以便将其用于
Desired Outcome 部分中描述的实现?
不清楚实际问题是什么...但这也许有助于解决问题
data = {}
for lhs,rhs in my_list_of_tuples:
try:
data[lhs].append(rhs)
except KeyError:
data[lhs] = [rhs]
print data.items()[:5]
为了解释得更简单一点,让我们换个角度看一下
my_list_of_tuples = [(1,2),(3,5),(7,8),(7,9)]
for item in my_list_of_tuples:
#on first loop item=(1,2) ; 2nd loop item=(3,5); 3rd loop item=(7,8)
left_number = item[0]
right_number = item[1]
#these 2 lines can be simplified to
left_number,right_number = item
#now if left number is already in the data dictionary we will append the new right number to its list
try:
data[left_number].append(right_number)
except KeyError: #: if the left_number is not already in our data dictionary
data[left_number] = [right_number] #: create a new list that contains only the right number
#now that we are done we have data that maps left numbers to right numbers
print data
#{1:[2],3:[5],7:[8,9]}
背景
更新:这是我正在使用的 the horrendous list(请原谅列表的虚假标题)。长度和数据可能会发生变化,因为我正在从 ever-changing 数据库中检索此信息。
期望的结果
我将进一步解释我的目的,因为我不确定最好的方法。每个数字代表一个 ID ,如下所述。我需要创建一个 XML 文件,其中软件元素的目标 sub-elements 基于元组中匹配的 SoftwareID 和 TargetID。
例如:
SoftwareID TargetID XML Representation
----------------------------------------------------------------------
65 115 <-- This Software element (id=65) has only one Target
sub-element (id=115)
138 218 <-- This Software element (id=138) will have multiple
138 219 Target sub-elements (ids=218, 219, 220)
138 220
尝试
我已经按照 here 的方式对序列进行解包,但是对于这个实现来说列表太长了。我收到一个 错误 ,上面写着 太多值无法解包 。
我现在看到这实际上是一个 元组列表 而不是一个元组,所以这无论如何都行不通。
我已经尝试了 this 实现,但得到一个 错误 说 元组 object 没有属性'split'.
至于我的其余实现,我无法分离这个愚蠢的列表。
问题
- 如何从这个元组列表中分离数据以便将其用于 Desired Outcome 部分中描述的实现?
不清楚实际问题是什么...但这也许有助于解决问题
data = {}
for lhs,rhs in my_list_of_tuples:
try:
data[lhs].append(rhs)
except KeyError:
data[lhs] = [rhs]
print data.items()[:5]
为了解释得更简单一点,让我们换个角度看一下
my_list_of_tuples = [(1,2),(3,5),(7,8),(7,9)]
for item in my_list_of_tuples:
#on first loop item=(1,2) ; 2nd loop item=(3,5); 3rd loop item=(7,8)
left_number = item[0]
right_number = item[1]
#these 2 lines can be simplified to
left_number,right_number = item
#now if left number is already in the data dictionary we will append the new right number to its list
try:
data[left_number].append(right_number)
except KeyError: #: if the left_number is not already in our data dictionary
data[left_number] = [right_number] #: create a new list that contains only the right number
#now that we are done we have data that maps left numbers to right numbers
print data
#{1:[2],3:[5],7:[8,9]}