나는 간단한 사전 이해 코드를 가지고 놀았고, 자동으로 생성 된 키 (원하는 경우 코드를 통해 교체 할 수있는 일련 번호)와 값에 대한 사용자 입력을 허용하도록 변경했습니다. 사용자가 키와 값을 입력 할 수있는 곳도 있습니다.
내 문제는 사용자가 이탈 할 수있는 방법을 찾는 것입니다. 즉, 항목 수로 100을 선택했지만 27 개만 필요한 경우 프로세스를 종료하기위한 명령을 입력 할 수있는 방법이 있어야합니다.
세 번째 예는 마지막에 조건을 입력했지만 파악하지 못한 경우입니다. 나는 그것을 할 때 작동하지 않을 것이라는 것을 알았고 사용자가 한 번의 실행을 할 수있게합니다.
"""
Example 1:
Auto-generated sequential numerical keys with user input for values:
"""
variable1=int(input("please select number of entries: "))
d1 = {x : input("Provide data: ") for x in range(1,variable1 + 1)}
"""
Example 2:
User input for keys and values:
"""
variable1=int(input("please select number of entries: "))
d1 = {input("Please provide key: "): input("Please provide data: " for x in range(1,variable1 + 1)}
"""
Example 3:
This shows where I tried to put the condition, which failed:
"""
variable1=int(input("please select number of entries: "))
d1 = {x : input("Provide data: ") for x in range(1,variable1 + 1) if x != 0}
의 2- 인수 형식은 iter
특정 변수를 반환 할 때까지 함수를 호출합니다. 특히, iter(input, "0")
0이 아닌 정수 문자열 스트림을 생성하며 zip
범위 를 사용할 수 있습니다 .
d1 = {x : y for x, y in zip(
range(1,100),
iter(lambda: input("Provide data "), "0")
)
}
또는을 사용 enumerate
하여 input
다음으로 필터링 할 수있는 번호가 매겨진 호출의 무한 스트림을 생성합니다 islice
.
from itertools import islice
d1 = {x: y for x, y in islice(
enumerate(
iter(lambda: input("Provide data "), "0"),
1
),
100
)
}
두 경우 모두 필터링되지 않은 튜플 스트림이 dict
있으므로 이해력을 사용하는 대신 직접 전달할 수 있습니다 .
d1 = dict(zip(range(1,100), iter(lambda: input("Provide data "), "0")))
d1 = dict(islice(enumerate(iter(lambda: input("Provide data "), "0"), 1), 100))
모든 중첩 함수 호출의 Lisp와 유사한 특성을 (당연히) 싫어하는 사람들은 쉽게 읽을 수 있도록 여러 줄로 나눌 수 있습니다. 예를 들면
responses = iter(lambda: input("Provide data "), "0")
d1a = dict(zip(range(1,100), responses))
d1b = dict(islice(enumerate(responses, 1)), 100)
또는 기존 루프를 선호하는 경우 :
d = {}
for k in range(1, 100): # or itertools.count(1) for unbounded input
v = input("Provide data ")
if v == "0":
break
d[k] = v
Эта статья взята из Интернета, укажите источник при перепечатке.
Если есть какие-либо нарушения, пожалуйста, свяжитесь с[email protected] Удалить.
я говорю два предложения