पायथन डिक्शनरी टू यूआरएल पैरामीटर्स


124

मैं URL पैरामीटर के रूप में उपयोग के लिए एक पायथन डिक्शनरी को एक स्ट्रिंग में बदलने की कोशिश कर रहा हूं। मुझे यकीन है कि ऐसा करने का एक बेहतर, अधिक पायथोनिक तरीका है। यह क्या है?

x = ""
for key, val in {'a':'A', 'b':'B'}.items():
    x += "%s=%s&" %(key,val)
x = x[:-1]

जवाबों:


252

का उपयोग करें urllib.urlencode()। यह कुंजी-मूल्य जोड़े का एक शब्दकोश लेता है, और इसे एक URL (जैसे, key1=val1&key2=val2) के लिए उपयुक्त रूप में परिवर्तित करता है ।

यदि आप पायथन 3 का उपयोग कर रहे हैं, तो उपयोग करें urllib.parse.urlencode()

यदि आप दोहराव वाले params जैसे URL बनाना चाहते हैं जैसे: p=1&p=2&p=3आपके पास दो विकल्प हैं:

>>> import urllib
>>> a = (('p',1),('p',2), ('p', 3))
>>> urllib.urlencode(a)
'p=1&p=2&p=3'

या यदि आप दोहराए गए params के साथ एक यूआरएल बनाना चाहते हैं:

>>> urllib.urlencode({'p': [1, 2, 3]}, doseq=True)
'p=1&p=2&p=3'

4
यदि आप उदाहरण के लिए दोहराए गए params के साथ एक url बनाना चाहते हैं: p = 1 & p = 2 & p = 3 तब a = (('p', 1), ('p', 2), ('p', 3)); urllib.urlencode (a) परिणाम 'p = 1 & p = 2 और p = 3' है
panchicore

6
दोहराए जाने वाले पैरामेट्स प्राप्त करने का एक और तरीका: urllib.urlencode ({'p': [1, 2, 3]}, डोज़क = ट्रू) जिसके परिणामस्वरूप 'p = 1 & p = 2 & p = 3' होता है।
mbaechtold

यदि आप आश्चर्य करते हैं कि doeseqइसके बारे में क्या है: "यदि क्वेरी arg में कोई भी मान अनुक्रम और डोज़क सही है, तो प्रत्येक अनुक्रम तत्व एक अलग पैरामीटर में परिवर्तित हो जाता है।"
मार्टिन थोमा

2

तीसरे पक्ष के पायथन url हेरफेर लाइब्रेरी फर्ल का उपयोग करें :

f = furl.furl('')
f.args = {'a':'A', 'b':'B'}
print(f.url) # prints ... '?a=A&b=B'

यदि आप दोहराव वाले पैरामीटर चाहते हैं, तो आप निम्न कार्य कर सकते हैं:

f = furl.furl('')
f.args = [('a', 'A'), ('b', 'B'),('b', 'B2')]
print(f.url) # prints ... '?a=A&b=B&b=B2'

मुझे कहाँ से फ़ुर्सत मिलेगी? यह एक मानक पुस्तकालय नहीं प्रतीत होता है
AMADANON Inc.

1
pip install furlइसका मानक पुस्तकालय का हिस्सा नहीं है
मयंक जायसवाल

-7

यह मेरे लिए थोड़ा अधिक पायथोनिक लगता है, और किसी अन्य मॉड्यूल का उपयोग नहीं करता है:

x = '&'.join(["{}={}".format(k, v) for k, v in {'a':'A', 'b':'B'}.items()])

8
यह प्रतिशत ठीक से पैरामीटर को एनकोड नहीं करेगा। यह अप्रत्याशित परिणाम पैदा करेगा यदि आपके डेटा में एम्परसेंड, बराबरी, हैश प्रतीक, आदि शामिल हैं
जेमी कॉकबर्न
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.