2017-09-01 53 views
0

我需要在Python3中用字典的键创建一个线路字符串。 我可以用end =''函数在一行中打印它们,但是我不能像那样更新。用Python3中的字典键创建一个线路字符串

我有一个像下面的字典。

array = { 
'MERCHANT': "TEST", 
'ORDER_REF': "Test123", 
'BACK_REF': "http://2ac99X37.ngrok.io/", 
'ORDER_PNAME[0]': "BLA", 
'ORDER_PCODE[0]': "BLA", 
'ORDER_PINFO[0]': "BLA", 
'ORDER_PRICE[0]': "1", 
'ORDER_VAT[0]': "18", 

}

我就是其中整理自己的钥匙和越来越长

for k, v in sorted(array.items()): 
hashstring =str(len(v)) + str(v) 

但是,当我在此步骤打印hashstring,他们打印像下面

25http://2ac99X37.ngrok.io/ 
4TEST 
3BLA 
3BLA 
3BLA 
11 
7Test123 
218 

我需要更新他们像下面因为真正的哈希计算

25http://2ac99X37.ngrok.io/ 4TEST 3BLA 3BLA 3BLA 11 7Test123 218 

就像我上面所提到的;我可以将它们打印在一行中,并且end ='' 函数,但这不会影响“hashstring”参数值。

我的散列计算代码如下所示。

signature = hmac.new(secret.encode('utf-8'), hashstring.encode('utf-8'), hashlib.md5).hexdigest() 

你能帮我吗?

最佳,

+0

初始化循环之前'hashstring'然后用'hashstring + ='代替'hashstring =' –

回答

0

您的代码的格式不正确。

我认为问题出在你的for循环中。

如果你写hashstring =str(len(v)) + str(v)它会代表一个不同的值,每次你打印它。

尝试

hashstring='' 
for k, v in sorted(array.items()): 
    hashstring += str(len(v)) + str(v) 
print(hashstring) 
+0

OMG!我现在可以哭,我不能相信这是由于缩进。 非常感谢!!它的工作@ bphi – Gokturk

0

当你很想很想许多个体串用分离器结合成一个字符串,你要使用.join。所以,你的积累到零件清单,然后.join他们:

In [6]: hashparts = [] 

In [7]: for k, v in sorted(array.items()): 
    ...:  hashparts.append(str(len(v)) + str(v)) 
    ...: 

In [8]: hashstring = ' '.join(hashparts) 

In [9]: print(hashstring) 
25http://2ac99X37.ngrok.io/ 4TEST 3BLA 3BLA 3BLA 11 7Test123 218 
+0

您好@juanpa。arrivillaga, 这也是作品!非常感谢,但我更愿意使用bphi的方式在一行中更新它们。 – Gokturk

+0

@Gokturk只要你知道,那个方法可以是O(n^2)而不是上面的O(n)解决方案,但是,如果字符串很小,这不会有什么大不了的。 –

+0

嗨@MosesKoledoye 我正在准备一个示例代码,我想从最简单的方式做到这一点 – Gokturk

1

你需要你的循环前初始化hashstring,然后继续串联到它在你的循环,如下:

hashstring = '' 
for k, v in sorted(array.items()): 
    hashstring += '{}{} '.format(len(v), v) 
hashstring = hashstring[:-1] # to remove the trailing space 

输出:

25http://2ac99X37.ngrok.io/ 4TEST 3BLA 3BLA 3BLA 11 7Test123 218 

或者你可以使用列表理解而不是循环在一行中执行,如下所示:

hashstring = ' '.join(['{}{}'.format(len(v), v) for k, v in sorted(array.items())])