我需要取一個整數n
并將其所有數字添加到 Python 字典(哈希表)中,以便稍后以O(1)
復雜的方式訪問它們。
n = 941726149
d = {}
for i in str(n):
d[i] = None
print(d)
問題是當有重復的數字時,字典會覆寫它們并改變其順序。例如,上面的代碼輸出:
{'9': None, '4': None, '1': None, '7': None, '2': None, '6': None}
但我需要的輸出是:
{'9': None, '4': None, '1': None, '7': None, '2': None, '6': None, '1': None, '4': None, '9': None}
我知道不可能將重復鍵添加到hashtable中,所以我想知道是否可以修改該資料結構以適應這種行為,或者使用其他(maybe custom)
支持它的結構。
編輯:
示例輸入和輸出:
- n = 123455 d[5] = [4, 5]
- n = 987385 d[8] = [1, 4] | d[9] = [0]
提前致謝。
uj5u.com熱心網友回復:
這是一個示例,對于數字中存在的每個數字,它都存盤其索引。
請注意,數字中不存在的數字也不會出現在結構中,因此嘗試對它們進行索引 ( structure[digit_not_existing_in_number]
) 將產生KeyError(這就是需要dict.get的原因)。但這很容易解決。
代碼00.py:
#!/usr/bin/env python
import sys
def o1_access_structure(n):
ret = {}
for i, e in enumerate(str(n)):
ret.setdefault(int(e), []).append(i)
return ret
def main(*argv):
ns = (
123455,
987385,
941726149,
)
for n in ns:
print("\n", n)
s = o1_access_structure(n)
for e in range(10):
print(" ", e, s.get(e))
if __name__ == "__main__":
print("Python {:s} {:03d}bit on {:s}\n".format(" ".join(elem.strip() for elem in sys.version.split("\n")),
64 if sys.maxsize > 0x100000000 else 32, sys.platform))
rc = main(*sys.argv[1:])
print("\nDone.")
sys.exit(rc)
輸出:
[cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q072713761]> "e:\Work\Dev\VEnvs\py_pc064_03.09_test0\Scripts\python.exe" ./code00.py Python 3.9.9 (tags/v3.9.9:ccb0e6a, Nov 15 2021, 18:08:50) [MSC v.1929 64 bit (AMD64)] 064bit on win32 123455 0 None 1 [0] 2 [1] 3 [2] 4 [3] 5 [4, 5] 6 None 7 None 8 None 9 None 987385 0 None 1 None 2 None 3 [3] 4 None 5 [5] 6 None 7 [2] 8 [1, 4] 9 [0] 941726149 0 None 1 [2, 6] 2 [4] 3 None 4 [1, 7] 5 None 6 [5] 7 [3] 8 None 9 [0, 8] Done.
或者,如果您不關心數字索引,而只關心它們的存在/頻率,您可以使用[Python.Docs]: class collections.Counter([iterable-or-mapping]):
>>> from collections import Counter >>> >>> >>> c = Counter(int(e) for e in str(941726149)) >>> >>> for e in range(10): ... print(e, c[e]) ... 0 0 1 2 2 1 3 0 4 2 5 0 6 1 7 1 8 0 9 2
uj5u.com熱心網友回復:
如何創建dict
默認值list
:
def dct_num(n):
dct = {}
str_n = str(n)
for idx,i in enumerate(str_n):
dct.setdefault(int(i), []).append(idx)
return dct
for n in [123455, 941726149, 987385]:
print(dct_num(n))
輸出:
{1: [0], 2: [1], 3: [2], 4: [3], 5: [4, 5]}
{9: [0, 8], 4: [1, 7], 1: [2, 6], 7: [3], 2: [4], 6: [5]}
{9: [0], 8: [1, 4], 7: [2], 3: [3], 5: [5]}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/495568.html
上一篇:字典中的熊貓資料框本身在字典中
下一篇:無法獲得絕對的JLabel位置