Die Geschichte beginnt hier ...
Ich bin morgens aufgestanden und habe einen Kommentar gesehen. Es ist etwas umständlich. Wörterbuch-Slice? Ich habe
die Python-Informationen überprüft. Die 3.6-Version von Python hat den internen Algorithmus von dict neu geschrieben. Er war vor Version 3.6 ungeordnet.
Also ist es jetzt in Ordnung, aufgepasst Diese Reihenfolge ist die Einfügereihenfolge der Schlüssel,
aber wie schneidet man das Wörterbuch, obwohl es keinen Index gibt? Die Listenliste?
Fügen Sie dann den Schlüssel in die Liste ein und verwenden Sie die Abfangmethode der Liste selbst, um ihn zu schneiden.
Verwenden Sie dann den abgefangenen Schlüssel für new Die Wörterbuchzuweisung!
Also schrieb ich eine Wörterbuch-Slice-Version 1.0, als mein Gehirn heiß war
# 字典切片1.0版本
def dictcut(dict, start, end):
# 临时存放字典的key
temp = list(dict.keys())
# 返回一个字典
result = {
}
#切列表里的key
temp = temp[start:end]
for i in range(len(temp)):
#用切完后的key列表对新的字典赋值
result[temp[i]] = dict.get(temp[i])
return result
#原字典
dict = {
"zero": "0", "one": "1", "two": "2", "three": "3", "four": "4"}
print("dict:", dict)
start = eval(input("起始位置:"))
end = eval(input("结束位置:"))
#调用切片方法
newdict =dictcut(dict, start, end)
print("dictcut(dict,%d,%d):" % (start, end), newdict)
Führen Sie dann das Ergebnis aus
-
Die beiden Zahlen sind positiv und überschreiten nicht die Grenze, normales Abfangen
-
Wenn ich von 2 bis zum Ende abfangen möchte, ist die Endkoordinate -1, aber das Übergeben von [2: -1] fängt [2, -1) ab, und das letzte wird nicht abgefangen. Wenn ich [2: 0] übergebe, sieht es so aus Das Folgende ist dasselbe.
Listen Sie also [2:] Abschnitte von 2 bis zum letzten auf, was hinsichtlich der Parameterübertragung sehr problematisch ist. -
Wenn das Abfangen von [-5, -3] in Ordnung ist, aber [-3, -5] nicht funktioniert.
Zusammenfassend hoffe ich, dass mein Wörterbuchschnitt in 360 Grad ohne Sackgassen von positiv nach negativ, von vorne nach hinten geschnitten werden kann Vorwärts schneiden, rückwärts schneiden
Die Dictionary Slice 2.0 Version ist also da!
# 字典切片2.0
def dictcut(dict, start, end):
# 临时存放字典的key
temp = list(dict.keys())
# 返回一个字典
result = {
}
# 分两个分支 1.start和end在可切片范围内 2.不在范围内
if start <= len(temp) - 1 and start >= -len(temp) and end <= len(temp) - 1 and end >= -len(temp):
#start大于end,且下标不重叠
if start > end and start - 1 != len(temp) + end:
#start和end同时为大于等于0
if start >= 0 and end >= 0:
# (4,2) 4 0 1
for i in range(start, len(temp)):
result[temp[i]] = dict.get(temp[i])
for i in range(0, end):
result[temp[i]] = dict.get(temp[i])
# start和end同时小等于0
if start <= 0 and end <= 0:
# (-1,-3) 4 0 1
for i in range(len(temp) + start, len(temp)):
result[temp[i]] = dict.get(temp[i])
for i in range(0, len(temp) + end):
result[temp[i]] = dict.get(temp[i])
# start大于0,end小于0
if start >= 0 and end < 0:
# (1,-2) 1 2
for i in range(start, len(temp) + end):
result[temp[i]] = dict.get(temp[i])
# end大于start,且下标不重叠
elif end > start and start + len(temp) != end - 1:
# start和end同时为大于等于0
if start >= 0 and end >= 0:
# (0,3) 0 1 2
for i in range(start, end):
result[temp[i]] = dict.get(temp[i])
# start和end同时大小等于0
if start <= 0 and end <= 0:
# (-4,-1) 1 2 3
for i in range(len(temp) + start, len(temp) + end):
result[temp[i]] = dict.get(temp[i])
# end大等于0,start小于0
if end >= 0 and start < 0:
# (-1,3) 4 0 1 2
for i in range(len(temp) + start, len(temp)):
result[temp[i]] = dict.get(temp[i])
for i in range(end):
result[temp[i]] = dict.get(temp[i])
#start等于end,或者下标重叠
elif end == start or start + len(temp) == end - 1 or end <= 0 and start - 1 == len(temp) + end:
print("切了个寂寞!")
# start或者end不在范围内
else:
print("传入参数有误!")
return result
#原字典
dict = {
"zero": "0", "one": "1", "two": "2", "three": "3", "four": "4"}
print("dict:", dict)
print("字典切割:左闭右开")
start = eval(input("起始位置:"))
end = eval(input("结束位置:"))
newdict = dictcut(dict, start, end)
# 如果返回的字典不为空,打印结果
if len(newdict) != 0:
print("dictcut(dict,%d,%d):" % (start, end), newdict)
Betriebsergebnis:
-
Wenn nicht in Reichweite
-
Wenn sich die Koordinaten überlappen, überlappen und einsam schneiden?
-
360 ° kein Totwinkelschnitt Schnitt (normaler Schnitt)
positive Zahl
negative Zahl -
360 ° kein Totwinkelschnitt (Schnitt von hinten nach
vorne ) positive Zahl
negative Zahl
Der 2.0-Code ist umständlicher, aber der Effekt des Wörterbuchschneidens ist immer noch deutlich sichtbar ~~~