Python 如何将字典键(元组)及其值组合成一个字符串?
我现在有字典:Python 如何将字典键(元组)及其值组合成一个字符串?,python,Python,我现在有字典: matrix = {(0, 0): 1, (1, 1): 1, (2, 2): 1} 我需要创建一个字符串来显示: (0,0,1),(1,1,1),(2,2,1) 如何将字典键(元组)和值合并为一个字符串? 我曾考虑将键放入一个列表,然后将键添加到列表中,但鉴于元组是不可变的,我不完全确定如何以正确的顺序添加键 result = [] for i, j in matrix.items(): result.append(i) for i in result: 我不知
matrix = {(0, 0): 1, (1, 1): 1, (2, 2): 1}
我需要创建一个字符串来显示:
(0,0,1),(1,1,1),(2,2,1)
如何将字典键(元组)和值合并为一个字符串?
我曾考虑将键放入一个列表,然后将键添加到列表中,但鉴于元组是不可变的,我不完全确定如何以正确的顺序添加键
result = []
for i, j in matrix.items():
result.append(i)
for i in result:
我不知道这是否是最具Python风格的解决方案,但请尝试以下方法:
str(tuple(_ + (matrix[_],) for _ in matrix))
请注意,您的键是
元组
,它们是不可变的,因此无法修改,因此您需要先将它们解压缩,然后与字典值联接
你可以用
matrix = {(0, 0): 1, (1, 1): 1, (2, 2): 1}
# *k unpack keys
print(','.join("({},{},{})".format(*k,v) for k,v in matrix.items()))
# output,
# (0,0,1),(1,1,1),(2,2,1)
根据您目前的工作:
lst = []
for i,j in matrix.items():
lst.append((i[0],i[1],j))
result = ",".join( repr(e) for e in lst )
或使用
%s
:
print(','.join(["(%s,%s,%s)"%(*k,v) for k,v in matrix.items()]))
或:
或者,如果版本不高于python 3.5:
print(','.join(["(%s,%s,%s)"%k+(v,) for k,v in matrix.items()]))
或:
您需要的基本操作是:
[k + (v,) for k, v in matrix.items()]
要以特定方式打印,您可能需要:
print(', '.join(str(k + (v,)) for k, v in matrix.items()))
请注意,字典是无序的,因此结果的顺序是未定义的。您的方法将使它们保持正确的顺序。代码中唯一需要更改的是将元组拆分为其子部分:
>>> result = []
>>> for (x, y), z in matrix.items():
result.append((x, y, z))
>>> print result
[(0, 0, 1), (1, 1, 1), (2, 2, 1)]
请包含您首先尝试的代码,以便我们知道您的位置。是否需要确切的输出,或者是否可以插入额外的空格而不产生问题?额外的空间可以让Python为您做更多的工作(无论哪种方式,成本都是相似的,只是稍微复杂一点的代码来避免空间)。我同意你应该;当您不愿意为相对简单的内容生成一个字符串时,要求人们充当代码编写服务是相当冒昧的。您确定要结果为字符串吗?或者元组列表?我承认你想要的字符串在括号中,所以我可能会删除这个答案。但是,我认为这是一种简单的方法,如果对任何人都有用,我会留下一点答案。请注意,您可以为单个元素命名,并避免完全使用嵌套的解包进行索引:
for(x,y),z in matrix.items():result.append((x,y,z))
(显然,最好使用自我记录的名称,而不仅仅是匿名的单字母名称)。
print(', '.join(str(k + (v,)) for k, v in matrix.items()))
>>> result = []
>>> for (x, y), z in matrix.items():
result.append((x, y, z))
>>> print result
[(0, 0, 1), (1, 1, 1), (2, 2, 1)]