หลังจากใช้cgi.parse_qs()แล้วจะแปลงผลลัพธ์ (พจนานุกรม) กลับเป็นสตริงการสืบค้นได้อย่างไร กำลังมองหาสิ่งที่คล้ายกับ   urllib.urlencode().
หลังจากใช้cgi.parse_qs()แล้วจะแปลงผลลัพธ์ (พจนานุกรม) กลับเป็นสตริงการสืบค้นได้อย่างไร กำลังมองหาสิ่งที่คล้ายกับ   urllib.urlencode().
คำตอบ:
urllib.parse.urlencode(ข้อความค้นหา doseq = False, [... ])แปลงอ็อบเจ็กต์การแมปหรือลำดับของทูเพิลสององค์ประกอบซึ่งอาจมีอ็อบเจ็กต์ str หรือ bytes เป็นสตริงข้อความ ASCII ที่เข้ารหัสเปอร์เซ็นต์
A dictคือการทำแผนที่
urllib.urlencode(query[,doseq])
แปลงวัตถุการแมปหรือลำดับของสิ่งสององค์ประกอบเป็นสตริง "เข้ารหัสเปอร์เซ็นต์" ... ชุดของkey=valueคู่ที่คั่นด้วย'&'อักขระ ...
dictส่งคืนโดยcgi.parse_qs()แท้จริงมีlists เป็น "ค่า" ของมัน การส่งผ่านสิ่งเหล่านี้โดยตรงจะส่งผลให้สตริงการสืบค้นดูแปลกมาก
                    ใน python3 แตกต่างกันเล็กน้อย:
from urllib.parse import urlencode
urlencode({'pram1': 'foo', 'param2': 'bar'})
เอาต์พุต: 'pram1=foo¶m2=bar'
สำหรับความเข้ากันได้ของ python2 และ python3 ลองสิ่งนี้:
try:
    #python2
    from urllib import urlencode
except ImportError:
    #python3
    from urllib.parse import urlencode
    คุณกำลังมองหาบางสิ่งบางอย่างว่าเหมือนurllib.urlencode()!
อย่างไรก็ตามเมื่อคุณเรียกparse_qs()(แตกต่างจากparse_qsl()) คีย์พจนานุกรมคือชื่อตัวแปรคิวรีที่ไม่ซ้ำกันและค่าจะเป็นรายการของค่าสำหรับแต่ละชื่อ
ในการส่งข้อมูลนี้ไปurllib.urlencode()คุณต้อง "แบน" รายการเหล่านี้ นี่คือวิธีที่คุณสามารถทำได้ด้วยการทำความเข้าใจรายการของสิ่งทู:
query_pairs = [(k,v) for k,vlist in d.iteritems() for v in vlist]
urllib.urlencode(query_pairs)
    doseq=Trueหรือคุณอาจจะผ่าน
                    บางทีคุณอาจกำลังมองหาสิ่งนี้:
def dictToQuery(d):
  query = ''
  for key in d.keys():
    query += str(key) + '=' + str(d[key]) + "&"
  return query
ใช้พจนานุกรมและแปลงเป็นสตริงการสืบค้นเช่นเดียวกับ urlencode มันจะเพิ่ม "&" สุดท้ายต่อท้ายสตริงข้อความค้นหา แต่จะreturn query[:-1]แก้ไขได้หากเป็นปัญหา
str.join()รึยัง? แล้วไงurllib.quote_plus()?
                    urlencodeในurllib.py(ควรโดยในหลามของคุณติดตั้ง) เพื่อดูว่าทำไมการสร้างสตริงแบบสอบถามเป็นบางครั้งไม่ได้ค่อนข้างเป็นง่ายๆเป็นคำตอบของคุณหมายถึง (โดยเฉพาะอย่างยิ่งความจำเป็นที่จะ 'อ้าง' ตัวอักษรบางอย่างที่ไม่ถูกต้องใน URL) @Ignacio ได้อ้างถึงฟังก์ชันสองอย่างที่จะล้างการใช้งานของคุณและทำให้ถูกต้อง
                    from urllib.parse import urlencode; urlencode(your_dict)) สั้นและง่ายกว่านี้! ฉันจะให้สิทธิ์ว่าบางครั้งมันก็ฉลาดที่จะสร้างล้อขึ้นมาใหม่แม้ว่าจะมีราคาแพงหรือไม่สะดวกในการเข้าถึงล้อที่มีอยู่และได้รับการออกแบบมาอย่างดี แต่ที่นี่การใช้ล้อนอกชั้นนั้นง่ายกว่าและเร็วกว่าการหมุนล้อที่ด้อยกว่าของคุณเอง .
                    
cgi.parse_qs()เลิกใช้แล้ว ใช้ urlparse.parse_qs () แทน