ලැයිස්තු අවබෝධය සහිත ශබ්ද කෝෂයක් සාදන්න


1291

මම පයිතන් ලැයිස්තු තේරුම් ගැනීමේ සින්ටැක්ස් වලට කැමතියි.

ශබ්ද කෝෂ නිර්මාණය කිරීමට ද එය භාවිතා කළ හැකිද? උදාහරණයක් ලෙස, යතුරු සහ අගයන් යුගල හරහා නැවත සැකසීමෙන්:

mydict = {(k,v) for (k,v) in blah blah blah}  # doesn't work

ආශ්‍රිත: collections.Counterයනු දේවල් ගණනය කිරීම සඳහා වූ විශේෂිත
විධානයකි:

Answers:


1924

විධිමත් අවබෝධයක් භාවිතා කරන්න :

{key: value for (key, value) in iterable}

සටහන: මෙය පයිතන් 3.x සඳහා (සහ 2.7 ඉහළට). කලින් පයිතන් 2.6 සහ ඊට පෙර, dictසාදන ලද යතුරු / අගය යුගල නැවත ලබා ගත හැකි බැවින් ඔබට එය ලැයිස්තු අවබෝධයක් හෝ උත්පාදක ප්‍රකාශනයක් ලබා දිය හැකිය. උදාහරණයක් වශයෙන්:

dict((key, func(key)) for key in keys)

සරල අවස්ථා වලදී ඔබට අවබෝධයක් අවශ්‍ය නොවේ ...

නමුත් ඔබට දැනටමත් යතුරු සහ / හෝ අගයන් නැවත ලබා ගත හැකි නම්, dictබිල්ට් කෙලින්ම අමතන්න:

1) consumed from any iterable yielding pairs of keys/vals
dict(pairs)

2) "zip'ped" from two separate iterables of keys/vals
dict(zip(list_of_keys, list_of_values))

1
මට වචන ලැයිස්තුවක් ['බළලා', 'බල්ලා', 'බළලා'] තිබේ නම් සහ මට යතුර සමඟ වචනයක් සහ වටිනාකමක් ගණනය කළ යුතු නම් කුමක් කළ යුතුද? ඒ සඳහා කෙටි කාර්යක්ෂම වාක්‍ය ඛණ්ඩයක් තිබේද?
ක්‍රයන්බු

ry ක්‍රියන්බු ඔබ අදහස් කරන්නේ ලැයිස්තුවේ දී ඇති මූලද්‍රව්‍යයක පුනරාවර්තන ගණන් කිරීම නම්, එකතු කිරීමේ පැකේජයේ කවුන්ටර පන්තියක් ඇත: docs.python.org/2/library/collections.html#collections.Counter
fortran


59

ඇත්ත වශයෙන්ම, එය කිසියම් ආකාරයක සිතියම්ගත කිරීමක් දැනටමත් වටහාගෙන තිබේ නම්, එය නැවත කියවීමට ඔබට අවශ්‍ය නැත.

>>> ts = [(1, 2), (3, 4), (5, 6)]
>>> dict(ts)
{1: 2, 3: 4, 5: 6}
>>> gen = ((i, i+1) for i in range(1, 6, 2))
>>> gen
<generator object <genexpr> at 0xb7201c5c>
>>> dict(gen)
{1: 2, 3: 4, 5: 6}


33

පයිතන් හි ලැයිස්තු අවබෝධය සහිත ශබ්ද කෝෂයක් සාදන්න

මම පයිතන් ලැයිස්තු තේරුම් ගැනීමේ සින්ටැක්ස් වලට කැමතියි.

ශබ්ද කෝෂ නිර්මාණය කිරීමට ද එය භාවිතා කළ හැකිද? උදාහරණයක් ලෙස, යතුරු සහ අගයන් යුගල හරහා නැවත සැකසීමෙන්:

mydict = {(k,v) for (k,v) in blah blah blah}

ඔබ සොයන්නේ "ඩික්ට් අවබෝධය" - එය ඇත්ත වශයෙන්ම:

mydict = {k: v for k, v in iterable}

උපකල්පනය blah blah blahකිරීම දෙවරක් කළ හැකි දෙයක් - ඔබ ඉතා සමීපයි. අපි ඒ වගේ "බ්ලා" කිහිපයක් නිර්මාණය කරමු:

blahs = [('blah0', 'blah'), ('blah1', 'blah'), ('blah2', 'blah'), ('blah3', 'blah')]

ඩික් තේරුම් ගැනීමේ වාක්‍ය ඛණ්ඩය:

දැන් මෙහි වාක්‍ය ඛණ්ඩය සිතියම්ගත කිරීමේ කොටසයි. කුමක්ද මේ කරයි dictඅවබෝධය වෙනුවට setඅවබෝධය (දේ ඔබේ ව්යාජ කේතය ආසන්න වන වන), මහ බඩවැල ය :පහත වගේ:

mydict = {k: v for k, v in blahs}

එය ක්‍රියාත්මක වූ බව අපට පෙනේ, සහ පයිතන් 3.7 හි ඇතුළත් කිරීමේ අනුපිළිවෙල රඳවා ගත යුතුය:

>>> mydict
{'blah0': 'blah', 'blah1': 'blah', 'blah2': 'blah', 'blah3': 'blah'}

පයිතන් 2 සහ 3.6 දක්වා, ඇණවුම සහතික කර නැත:

>>> mydict
{'blah0': 'blah', 'blah1': 'blah', 'blah3': 'blah', 'blah2': 'blah'}

පෙරනයක් එක් කිරීම:

සියළුම අවබෝධයන්හි සිතියම්කරණ අංගයක් සහ ඔබට අත්තනෝමතික ප්‍රකාශන ලබා දිය හැකි පෙරහන් අංගයක් ඇත.

එබැවින් ඔබට අවසානයට පෙරහන් කොටසක් එක් කළ හැකිය:

>>> mydict = {k: v for k, v in blahs if not int(k[-1]) % 2}
>>> mydict
{'blah0': 'blah', 'blah2': 'blah'}

යතුරු සහ අගයන් සිතියම් ගත කිරීමට පෙර දත්ත පෙරීමට අවසාන අක්‍ෂරය 2 න් බෙදිය හැකිදැයි අපි මෙහිදී පරීක්‍ෂා කරමු.


25

පයිතන් අනුවාදය <2.7 (RIP, 2010 ජූලි 3 - 2019 දෙසැම්බර් 31) , පහත සඳහන් දෑ කරන්න:

d = dict((i,True) for i in [1,2,3])

පයිතන් අනුවාදය> = 2.7, පහත සඳහන් දෑ කරන්න:

d = {i: True for i in [1,2,3]}

22

@ Fortran ගේ පිළිතුරට එක් කිරීමට, ඔබට යතුරු key_listලැයිස්තුවක් මෙන්ම සාරධර්ම ලැයිස්තුවක් හරහා නැවත කියවීමට අවශ්‍ය නම් value_list:

d = dict((key, value) for (key, value) in zip(key_list, value_list))

හෝ

d = {(key, value) for (key, value) in zip(key_list, value_list)}

6

ඩික්ට් අවබෝධය භාවිතා කරමින් ශබ්ද කෝෂ නිර්මාණය සඳහා තවත් උදාහරණයක් මෙන්න:

මා මෙහි කිරීමට උත්සාහ කරන්නේ එක් එක් යුගලයේ හෝඩියේ ශබ්ද කෝෂයක් නිර්මාණය කිරීමයි; යනු ඉංග්‍රීසි අකුර සහ ඉංග්‍රීසි හෝඩියේ අනුරූප පිහිටීමයි

>>> import string
>>> dict1 = {value: (int(key) + 1) for key, value in 
enumerate(list(string.ascii_lowercase))}
>>> dict1
{'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4, 'g': 7, 'f': 6, 'i': 9, 'h': 8, 
'k': 11, 'j': 10, 'm': 13, 'l': 12, 'o': 15, 'n': 14, 'q': 17, 'p': 16, 's': 
19, 'r': 18, 'u': 21, 't': 20, 'w': 23, 'v': 22, 'y': 25, 'x': 24, 'z': 26}
>>> 

ලැයිස්තුවේ ඇති අක්ෂර හා ඒවායේ දර්ශක ලබා ගැනීම සඳහා ගණනය කිරීම් මෙහි භාවිතා කිරීම සහ ශබ්දකෝෂය සඳහා ප්‍රධාන අගය යුගලයක් ජනනය කිරීම සඳහා හෝඩිය සහ දර්ශක මාරු කිරීම සැලකිල්ලට ගන්න.

එය ඔබට ශබ්ද කෝෂ සංයුක්තය පිළිබඳ හොඳ අදහසක් ලබා දෙන අතර ඔබේ කේතය සංයුක්ත කිරීමට එය නිතර භාවිතා කිරීමට ඔබව දිරිමත් කරයි


1
හොඳ පිළිතුර - සරල:d = {k: v+1 for v, k in enumerate(string.ascii_lowercase)}
ජොනීඩ්‍රාමා

4

මේක උත්සාහ කරන්න,

def get_dic_from_two_lists(keys, values):
    return { keys[i] : values[i] for i in range(len(keys)) }

අපට රට සහ ප්‍රාග්ධනය ලැයිස්තු දෙකක් ඇතැයි උපකල්පනය කරන්න

country = ['India', 'Pakistan', 'China']
capital = ['New Delhi', 'Islamabad', 'Beijing']

ඉන්පසු ලැයිස්තු දෙකෙන් ශබ්දකෝෂයක් සාදන්න:

print get_dic_from_two_lists(country, capital)

ප්‍රතිදානය මේ වගේ ය,

{'Pakistan': 'Islamabad', 'China': 'Beijing', 'India': 'New Delhi'}

9
ඔබට සිප් භාවිතා කළ හැකිය
ඇන්ඩ්‍රේ සයිමන්

2
>>> {k: v**3 for (k, v) in zip(string.ascii_lowercase, range(26))}

ඒ හා සමාන සංක්ෂිප්ත වාක්‍ය ඛණ්ඩයක් භාවිතා කරමින් ධාවන වේලාවේදී ශබ්ද කෝෂ නිර්මාණය කිරීම ප්‍රකාශ කිරීමට ඔබට ඉඩ සලසන ඩයික් අවබෝධය සඳහා පයිතන් සහාය දක්වයි.

ශබ්ද කෝෂ අවබෝධය {යතුර: නැවත ලබා ගත හැකි in සඳහා (යතුර, අගය) අගය ගනී. මෙම වාක්‍ය ඛණ්ඩය පයිතන් 3 හි හඳුන්වා දී ඇති අතර එය පයිතන් 2.7 තරම් back තට ගෙන ඇත, එබැවින් ඔබ ස්ථාපනය කර ඇති පයිතන් අනුවාදය කුමක් වුවත් එය භාවිතා කිරීමට ඔබට හැකි විය යුතුය.

කැනොනිකල් නිදසුනක් නම් ලැයිස්තු දෙකක් ගෙන ශබ්දකෝෂයක් නිර්මාණය කිරීම, පළමු ලැයිස්තුවේ එක් එක් ස්ථානයේ ඇති අයිතමය යතුරක් බවට පත්වන අතර දෙවන ලැයිස්තුවේ අනුරූප ස්ථානයේ ඇති අයිතමය අගය බවට පත්වේ.

මෙම අවබෝධය තුළ භාවිතා කරන සිප් ශ්‍රිතය ටුපල්වල අනුකාරකයක් ලබා දෙයි, එහිදී ටුපල්හි එක් එක් මූලද්‍රව්‍යය එක් එක් ආදාන පුනරාවර්තනවල එකම ස්ථානයකින් ගනු ලැබේ. ඉහත උදාහරණයේ දී, ආපසු ලබා දුන් අනුකාරකයේ ටුපල් (“අ”, 1), (“ආ”, 2) යනාදිය අඩංගු වේ.

ප්‍රතිදානය:

i 'i': 512, 'e': 64, 'o': 2744, 'h': 343, 'l': 1331, 's': 5832, 'b': 1, 'w': 10648, ' c ': 8,' x ': 12167,' y ': 13824,' t ': 6859,' p ': 3375,' d ': 27,' j ': 729,' a ': 0,' z ' : 15625, 'f': 125, 'q': 4096, 'u': 8000, 'n': 2197, 'm': 1728, 'r': 4913, 'k': 1000, 'g': 216 , 'v': 9261}


2

මෙම කේතය භාවිතා කළ හැකි විවිධ අගයන් සහිත බහු ලැයිස්තු සඳහා ලැයිස්තු අවබෝධය භාවිතා කරමින් ශබ්ද කෝෂය නිර්මාණය කරයි pd.DataFrame()

#Multiple lists 
model=['A', 'B', 'C', 'D']
launched=[1983,1984,1984,1984]
discontinued=[1986, 1985, 1984, 1986]

#Dictionary with list comprehension
keys=['model','launched','discontinued']
vals=[model, launched,discontinued]
data = {key:vals[n] for n, key in enumerate(keys)}

enumerateසමත් වනු ඇත nකිරීමට valsඑක් එක් ගැලපෙන keyලැයිස්තුවට සමග


1

වෙනත් උදාහරණයකට විසි කිරීමට. ඔබට පහත ලැයිස්තුවක් ඇතැයි සිතන්න:

nums = [4,2,2,1,3]

ඔබට එය නියෝගයක් බවට පත් කිරීමට අවශ්‍ය වන්නේ යතුර දර්ශකය වන අතර අගය ලැයිස්තුවේ මූලද්‍රව්‍යය වේ. පහත දැක්වෙන කේත රේඛාව සමඟ ඔබට එය කළ හැකිය:

{index:nums[index] for index in range(0,len(nums))}

0

ඔබට එක් එක් යුගල සඳහා නව ආ ict ාවක් සාදා එය පෙර ආ ict ාව සමඟ ඒකාබද්ධ කළ හැකිය:

reduce(lambda p, q: {**p, **{q[0]: q[1]}}, bla bla bla, {})

නිසැකවම මෙම ප්රවේශයන් අවශ්ය reduceවේ functools.


එකම අදහස: අඩු කරන්න (lambda p, q: {** p, ** dict ([q])}, bla bla bla, {})
මහමුද් කේ.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.