我做过这样的事情:
d = [('e', 0), ('f', 1), ('e', 0), ('f', 1)]
e = ['a']
d = [(n,j) for n,(i,j) in zip(e,d)]
d
[('a',0)]
我只是尝试用数组值替换等效的元组值,而不更改相关的数字。但是列表只到数组e
的len而不是d
。我希望得到的输出是这样的:
d
[('a', 0), ('f', 1), ('e', 0), ('f', 1)]
答案 0 :(得分:4)
只需将SELECT '{"' + t.groupId + '": [' + STUFF(
(
SELECT ',{ "some_data":"' + td.some_data + '"', ', "some_other_data":' + CONVERT( NVARCHAR, td.some_other_data ) + '}'
FROM some_table td
WHERE t.groupId = td.groupId
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)'), 1, 1, '') + ']}'
FROM some_table t
GROUP BY t.groupId
的未处理尾部添加到已处理部分:
d
答案 1 :(得分:3)
答案 2 :(得分:1)
如果改变原始d
列表是可以接受的,我只需通过迭代d
来替换第一个e
元组:
d = [('e', 0), ('f', 1), ('e', 0), ('f', 1)]
e = ['a']
for i, new_letter in enumerate(e):
d[i] = (new_letter, d[i][1])
print(d)
# [('a', 0), ('f', 1), ('e', 0), ('f', 1)]
请注意,Python元组是不可变的。 d[i][0] = new_letter
会因错误而失败:
TypeError:' tuple'对象不支持项目分配
上面的代码通过用新的元组替换旧元组来修改d
列表。它无法修改旧元组。
答案 3 :(得分:0)
我认为问题是zip功能。文档说(zip)“返回元组的迭代器,其中第i个元组包含来自每个参数序列或迭代的第i个元素。迭代器在最短的输入可迭代用尽时停止。”
[(n,j) for n,(i,j) in zip(e,d)] + d[len(e):]
应该做的伎俩